Unity3D旋转不按预期运行

时间:2017-08-23 15:40:23

标签: c# unity3d rotation

我正在尝试为模拟制作一个小型演示,我认为这部分很容易。男孩我错了,现在我完全卡住了。这是我的问题。

我正在尝试使用旋转,对于这个问题,我们将使用30度角,如下所示:

The green ray is -15 degrees, red is 0 degrees and blue is +15 degrees for a total of 30 degrees.

绿色光线为-15度,红色为0度,蓝色为+15度,总共30度。

现在我想将所说的30度划分为相等的部分,所以第一个好的数字将是10.这意味着我可以每隔3度绘制一条射线直到我达到最大值,在这种情况下是+15度。这可以在下面看到:

Looks good! There is a small amount of space that is off and if anyone knows why that is please let me know.

看起来不错!有一小部分空间关闭,如果有人知道为什么,请告诉我。

现在,我需要大量的光线,所以我们要上升10倍,并将分割数增加到100,这可以在下面看到。另外我需要使用imgur因为这里只允许两张照片所以请耐心等待我。谢谢。

https://imgur.com/a/cWDdj

第一张照片是100块,你可以看到光线全部投射到左边。这是一个问题。

第二张照片是将分区增加到1000.现在更糟糕的是,除了15度区域外,它一直围绕物体。

以下是执行此操作的代码段。

 if(testRotation)   
 {
      //Sets the objects rotation to the starting rotation which is -15 degeres
      this.transform.Rotate(this.transform.rotation.x, this.transform.rotation.y - 15.0f,           
           this.transform.rotation.z);

      for (int i = 0; i <= 10; i++)
      {
           //Draws a ray at the current position and forwards relative to the objects transform
           Debug.DrawRay(this.transform.position, 
           this.transform.forward * maxSightDistance, Color.cyan, 1000.0f);

           //This advances the rotation by a factor of one chunk 
           //which in this case is 10 which seems to work 
           this.transform.Rotate(new Vector3(this.transform.rotation.x, 
           this.transform.rotation.y + (30/10), this.transform.rotation.z));
      }

      //This makes it so it doesn't run forever
      testRotation = false;

 }

唯一更改的地方是在检查条件的for循环中,还有Rotate函数的第二个参数,它通过&#34;一个块&#34;添加到当前旋转值。

对于100个块,我将这些块修改为:for(int i = 0; i < 100; i++)this.transform.rotation.y + (30/100)

对于1000个块,我将这些块修改为:for(int i = 0; i < 1000; i++)this.transform.rotation.y + (30/1000)

我完全陷入困境,不知道为什么它正在做它正在做的事情。如果您需要解释或澄清的内容,请告诉我们!

1 个答案:

答案 0 :(得分:3)

您将数字除以整数,它将返回一个整数。您需要除以浮点数来返回十进制数 即。

this.transform.rotation.y + (30/100f)
this.transform.rotation.y + (30/1000f)

编辑:此外,旋转的组件应为0而不是之前的值,以避免累积旋转。

transform.Rotate(new Vector3(0, 30/10f, 0));