【问题标题】:What is the difference between transform.Rotate methods?transform.Rotate 方法有什么区别?
【发布时间】:2015-08-02 13:36:48
【问题描述】:

两个可用的transform.Rotate 方法重载之间的实际区别是什么?

一个版本使用浮点数作为其参数,而另一个使用 Vector3 似乎使用相同的参数。

两者之间是否存在首选/最佳实践/性能更好的选项?该文档并没有真正说明一种方式。

transform.Rotate (new Vector3(0, Input.GetAxis("Mouse X") * sensitivityHor, 0));
transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityHor, 0);

【问题讨论】:

  • 使用对当前代码最方便的一个。毫无疑问,一个调用另一个,但我们故意不告诉我们哪种方式有效,因为它是与方法的正常运行无关的内部实现细节。

标签: c# unity3d transform


【解决方案1】:

它们是一样的。我建议选择使代码易于阅读的那个:如果您有一个可以使用的向量(例如角速度),请使用该向量;如果每个轴都有一个浮点数(例如鼠标移动),请使用接受三个浮点数的那个。当您回到该代码尝试修复某些错误时,这对您来说最易读是一个问题。

【讨论】:

  • 谢谢 - 这就是我要找的。在上面的示例中,上下文是在鼠标移动和对象旋转中(您可能已经知道给定指定的参数),并且使用一个与另一个的原因完全有道理。
【解决方案2】:

两种旋转方法几乎相同,但又大不相同:

方法

public void Rotate(float xAngle, float yAngle, float zAngle);

接受三个“角度”并沿提供的角度方向旋转对象。

相反的方法

public void Rotate(Vector3 axis, float angle);

接受一个定义旋转轴的向量和一个定义角度的浮点数(你想旋转多少?)。例如,如果将axis 设置为new Vector3(0f, 0f, 1f); 并将angle 设置为15f,则 rotate 方法将仅沿 z 轴将对象旋转 15 度。该旋转方法将仅检查axis 参数中哪个轴的值大于0,并仅围绕该轴旋转对象。

【讨论】:

  • 另外如果你将axis参数设置为new Vector3(0, 0, 3),这个rotate方法仍然会认为用户想绕z轴旋转,不会使用3f作为旋转倍数。
  • 您选择的第二个Rotate 方法是错误的:asker 使用的是public void Rotate(Vector3 eulerAngles),而不是轴角度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 2019-05-26
  • 2019-03-31
  • 2018-05-14
  • 2010-09-14
  • 2016-05-03
  • 2020-03-11
相关资源
最近更新 更多