C# 如何使LookAt对齐transform.up向量而不是transform.forward?

C# 如何使LookAt对齐transform.up向量而不是transform.forward?,c#,unity3d,rotation,artificial-intelligence,C#,Unity3d,Rotation,Artificial Intelligence,问题是,我无法制作一个脚本,使敌人旋转,使“向上”指向玩家,(我的意思是,这样它将通过transform.up到达玩家),我还没有找到任何有效的解决方案,(从我所能告诉的情况来看) 我正在尝试制作一个小的2D游戏,只供我的朋友们玩。我尝试的是让敌人看着玩家,然后将“z”旋转设置为与“x”旋转相同,然后重置“x”和“y”旋转(以便“向上”指向玩家)。但敌人只是直冲上去 使用UnityEngine; 公共阶级敌人:单一行为 { public Transform Player;//可以控制的播放器的转

问题是,我无法制作一个脚本,使敌人旋转,使“向上”指向玩家,(我的意思是,这样它将通过transform.up到达玩家),我还没有找到任何有效的解决方案,(从我所能告诉的情况来看)

我正在尝试制作一个小的2D游戏,只供我的朋友们玩。我尝试的是让敌人看着玩家,然后将“z”旋转设置为与“x”旋转相同,然后重置“x”和“y”旋转(以便“向上”指向玩家)。但敌人只是直冲上去

使用UnityEngine;
公共阶级敌人:单一行为
{
public Transform Player;//可以控制的播放器的转换
公共浮标移动速度=4;//敌人应该走多快
void FixedUpdate()
{
变换。看(玩家);
transform.rotation=Quaternion.Euler(transform.rotation.x,0,transform.rotation.x);
transform.rotation=Quaternion.Euler(0,0,transform.rotation.z);
transform.position+=transform.up*MoveSpeed*Time.deltaTime;
}
}
所以我想要发生的是,敌人将移动到玩家身上,但旋转部分不起作用,它只是在空中直线上升,而不是跟随玩家。我可能只是很愚蠢,因为使用了

transform.rotation = Quaternion.Euler(transform.rotation.x, 0, transform.rotation.x);
transform.rotation = Quaternion.Euler(0, 0, transform.rotation.z);
这两次您都使用新值覆盖旋转(
Vector3
)和字段
transform.rotation.x
不是在Unity inspector中看到的围绕
x
-轴的纯旋转


这在一定程度上取决于你到底希望敌人如何旋转,但你可以简单地使用like

LookAt
默认情况下会导致旋转,使得
transform.forward
指向目标,
transform.right
保持指向右侧(ish),而
transform.up
保持指向上方(ish)。因此,你所要做的就是围绕局部X轴旋转
变换。右
精确地
90°
所以现在
变换。向前
指向下方,而
变换。向上
指向目标

导致


如果您还想更改另一个轴,您仍然可以围绕局部
变换.up
轴另外旋转它,例如向前翻转
向量“向上”:


您在
FixedUpdate
而不是
Update
中这样做,实际上有什么特殊原因吗
FixedUpdate
只能用于物理相关的内容

transform.LookAt(Player);
transform.RotateAround(transform.position, transform.right, 90);
transform.LookAt(Player);
transform.RotateAround(transform.position, transform.right, 90);
transform.RotateAround(transform.position, transform.up, 180);