我正在制作2D平台游戏,其中玩家的手臂指向鼠标光标。这种机制用于瞄准玩家的武器。但是,旋转手臂时我遇到了一些故障。
我知道我得到这些错误的原因:手臂(在层次结构中)是玩家的孩子,我正在对玩家做的是每次翻转(反转)其transform.localScale.x
值它沿指定方向移动,以便玩家精灵在给定方向上查看。由于手臂是玩家的孩子,它自己的transform
也会被翻转,使其看起来与玩家的方向相同,这就是我想要的。但是,这会导致手臂旋转出现一些错误。由于手臂的transform.localScale.x
值被翻转,旋转全部搞砸了,我无法弄清楚如何解决它。
以下是一些用于移动播放器和手臂的示例脚本。它们被简化,以便您可以更好地阅读它。
// Update is called once per frame
void Update () {
var input = Input.GetAxis("Horizontal");
if(input > 0) {
if(!facingRight) {
ChangeOrientation(gameObject, new Vector3(-1,1,1));
facingRight = !facingRight;
}
}
if(input < 0) {
if(facingRight) {
ChangeOrientation(gameObject, new Vector3(-1,1,1));
facingRight = !facingRight;
}
}
rbody.velocity = new Vector2(speed * input, rbody.velocity.y);
}
public static void ChangeOrientation (GameObject g, Vector3 changeBy) {
var newTransform = g.transform.localScale;
newTransform.x *= changeBy.x;
newTransform.y *= changeBy.y;
newTransform.z *= changeBy.x;
g.transform.localScale = newTransform;
}
我的手臂旋转脚本:
void Update () {
//rotation
Vector3 mousePos = Input.mousePosition;
mousePos.z = 0;
Vector3 objectPos = Camera.main.WorldToScreenPoint (transform.position);
mousePos.x = mousePos.x - objectPos.x;
mousePos.y = mousePos.y - objectPos.y;
float angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(new Vector3(0, 0,
(PlayerRunMovementController.facingRight ? angle : angle )));
}
感谢您提供的任何帮助。