所以上周我开始研究RPG并且我已经开始研究敌人的AI,它应该转向它的目标,但它并没有。我做的是为敌人创建了一个子对象并放置一个脚本将其旋转到目标,然后在敌人的脚本中我做了这个:
if(transform.eulerAngles.y > rotTracker.transform.eulerAngles.y) {
transform.eulerAngles.y -= 2 * Time.deltaTime;
}
if(transform.eulerAngles.y < rotTracker.transform.eulerAngles.y) {
transform.eulerAngles.y += 2 * Time.deltaTime;
}
rotTracker是一个GameObject变量。那么,这段代码有什么问题?旋转跟踪器改变旋转但不改变敌人。也许是因为它有看待不同东西的子对象?我创造了一个精灵并把它放在敌人之上,它代表了敌人的健康,并且总是转向相机。
答案 0 :(得分:1)
您无法直接更改角度。您需要更改矢量位置。例如:
var yRotation -= 2 * Time.deltaTime;
transform.eulerAngles = new Vector3(0, yRotation, 0);
希望这有帮助!
答案 1 :(得分:0)
您不应该使用transform.eulerAngles
进行增量,只能使用固定值。另外,最好将其设置为矢量,而不是单轴。
如果您已将脚本放在孩子身上并且实际上想要旋转父母,那么您的转换是错误的,但我无法清楚地阅读。
此外,我建议做这样的事情:
var dir = transform.postion - target.position;
dir.y = 0; // set the axis you want to rotate around to 0
var targetRotation = Quaternion.LookRotation(dir);
transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, Time.deltaTime * speed);
speed
是您想要旋转速度的一个因素。
(我认为代码应该是正确的,我使用的是C#。)