我想让我的角色在另一个方向上翻转,并在这个方向上前进,但我得到的是,我的角色只能在一个方向上行走,即使角色转身,你能帮助解决它吗?
这是我的代码
public class BirdMovement : MonoBehaviour
{
Rigidbody2D jump;
public bool reverse;
void Start()
{
jump = GetComponent<Rigidbody2D>();
}
void Update()
{
int jumpstrength = 50;
transform.Translate(Input.GetAxis("Horizontal") * 5f * Time.deltaTime, 0f, 0f);
if (Input.GetAxis("Horizontal") > 0 && !reverse)
{
flip();
}
if (Input.GetAxis("Horizontal") < 0 && reverse)
{
flip();
}
if (Input.GetKey(KeyCode.Mouse0))
{
jump.AddForce(new Vector2(0, jumpstrength));
}
void flip()
{
reverse = !reverse;
transform.eulerAngles = new Vector3(0,180,0);
return;
}
}
Transform.Translate会考虑到你的鸟所面对的方向。你要让2个动作相互配合。
transform.Translate(Input.GetAxis("Horizontal") * 5f * Time.deltaTime, 0f, 0f);
如果轴值低于负值,你告诉鸟儿在x上向后走,但这是鸟儿的本地x,而不是世界的全局x。同时,你告诉它要翻转,所以它就翻转了,它的后退变成了以前的前进。
你可以用轴的绝对值来补救。
transform.Translate(Mathf.Abs(Input.GetAxis("Horizontal")) * 5f * Time.deltaTime, 0f, 0f);
或者要求Translate使用全局坐标。
transform.Translate(Input.GetAxis("Horizontal") * 5f * Time.deltaTime, 0f, 0f, Space.World);
说到这里,我现在想知道你的翻转功能到底是怎么用的,你每次都是在y上赋值180。这将无法让你的角色翻转不止一次。用transform.Rotate来代替。
void flip()
{
reverse = !reverse;
transform.Rotate(0,180,0);
return;
}
另外,在你的例子中,方括号的方式,flip是update的一个嵌套函数。是这样的吗?