如何使用欧拉角在 Unity 中翻转 2D 角色
How to Flip 2D character in Unity using Euler Angles
我想让我的角色朝另一个方向翻转,然后朝另一个方向前进,但是我得到的是,我的角色只能朝一个方向走,即使角色转身,你能帮忙解决吗
这是我的代码
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 会考虑鸟的朝向。你让这两个动作相互对抗。
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);
或者要求翻译使用全局坐标,
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;
}
还有你例子中括号的方式,翻转是更新的嵌套函数。这是故意的吗?
我想让我的角色朝另一个方向翻转,然后朝另一个方向前进,但是我得到的是,我的角色只能朝一个方向走,即使角色转身,你能帮忙解决吗
这是我的代码
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 会考虑鸟的朝向。你让这两个动作相互对抗。
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);
或者要求翻译使用全局坐标,
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;
}
还有你例子中括号的方式,翻转是更新的嵌套函数。这是故意的吗?