【问题标题】:JScript -- Unity transform.eulerAngles.y not WorkingJScript -- Unity transform.eulerAngles.y 不工作
【发布时间】:2016-03-19 21:43:07
【问题描述】:

所以上周我开始制作 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 变量。那么,这段代码有什么问题呢?旋转跟踪器改变旋转但不改变敌人。也许是因为它有看不同事物的子对象?我创建了一个精灵并将其放在敌人的上方,它代表敌人的健康状况并始终朝向镜头。

【问题讨论】:

  • dude ... "unityscript" 已从 Unity 中弃用 - 你不能使用它。你完全是100%浪费你的时间,伙计。这是绝对的、完全的、完全的浪费你的时间。请注意,c#实际上更容易使用,你现在必须改变你的学习方式
  • 我打算改用 C#,但实际上 JS 并没有那么糟糕。它可以很好地处理这里和那里的一些错误,但除此之外它真的很好。无论如何,乔,你是创造见证人的那个人吗?因为你知道乔纳森·布洛,乔·布洛

标签: unity3d jscript


【解决方案1】:

您不能直接更改角度。您需要更改矢量位置。例如:

var yRotation -= 2 * Time.deltaTime;    
transform.eulerAngles = new Vector3(0, yRotation, 0);

希望这会有所帮助!

【讨论】:

  • 谢谢,就像我这样做的魅力一样:transform.eulerAngles += Vector3(0, 1, 0) * number * Time.deltaTime;
【解决方案2】:

您不应该使用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#。)

【讨论】:

  • 这是一个很好的方法,但这不是我真正想要的,因为我只想要一个轴
  • 你也可以这样做,做了一个编辑,我认为应该是正确的。
  • 是的,现在看起来不错,但我不知道为什么,但我不喜欢四元数。反正我会用这个:)
猜你喜欢
  • 2013-11-08
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 2014-12-11
  • 2015-06-14
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多