玩家和敌人 2D 自动旋转
Player & Enemy 2D auto-rotation
我在屏幕底部有一个玩家,在屏幕顶部有一个敌人。我希望他们都不断地向对方旋转。这是我的代码:
void Update ()
{
Vector3 diff = target.position - transform.position;
diff.Normalize();
float zRotation = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
Vector3 lookDirection = new Vector3(0, 0, zRotation - 90);
transform.rotation = Quaternion.Euler(lookDirection);
}
在这种状态下,玩家的行为符合预期,但敌人总是转离玩家,这意味着他向上看而不是向下看玩家所在的位置。
如果我像这样切换 diff
向量:
Vector3 diff = transform.position - target.position;
然后就是玩家把目光从敌人身上移开。
两个精灵在编辑器中的旋转和缩放值为 0。
这里有什么问题?
你的解决方案对我来说很好用:http://imgur.com/a/spi3O
难道敌人的"up"就是玩家的"down"。意思是你的一个 sprite 是倒着画的?
您可以尝试以下方法,但结果相同:
var dir = target.position - transform.position;
var angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
如果您打算使用相同的方法来计算旋转,则需要确保您的精灵具有相同的世界相对原生旋转,或者修复它。
我在屏幕底部有一个玩家,在屏幕顶部有一个敌人。我希望他们都不断地向对方旋转。这是我的代码:
void Update ()
{
Vector3 diff = target.position - transform.position;
diff.Normalize();
float zRotation = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
Vector3 lookDirection = new Vector3(0, 0, zRotation - 90);
transform.rotation = Quaternion.Euler(lookDirection);
}
在这种状态下,玩家的行为符合预期,但敌人总是转离玩家,这意味着他向上看而不是向下看玩家所在的位置。
如果我像这样切换 diff
向量:
Vector3 diff = transform.position - target.position;
然后就是玩家把目光从敌人身上移开。 两个精灵在编辑器中的旋转和缩放值为 0。
这里有什么问题?
你的解决方案对我来说很好用:http://imgur.com/a/spi3O
难道敌人的"up"就是玩家的"down"。意思是你的一个 sprite 是倒着画的?
您可以尝试以下方法,但结果相同:
var dir = target.position - transform.position;
var angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
如果您打算使用相同的方法来计算旋转,则需要确保您的精灵具有相同的世界相对原生旋转,或者修复它。