【问题标题】:Unknown rotation behaviour of gameObject while trying to rotate using LocalEulerAngles尝试使用 LocalEulerAngles 旋转时游戏对象的未知旋转行为
【发布时间】:2016-11-20 01:47:09
【问题描述】:

我是游戏开发的新手,我正在关注 Manning 的《Unity in action》一书。这是用于旋转游戏对象的代码 sn-p(来自书中):

public RotationAxes axes = RotationAxes.MouseXandY;
public float sensitivityHorizontal = 9.0f;
public float sensitivityVert = 9.0f;

private float rotationX = 0;
public float minimumVert = -45.0f;
public float maximumVert = 45.0f;

// Update is called once per frame
void Update () {
    float input = Input.GetAxis ("Mouse X");

        //Vertical Rotation
    if (axes == RotationAxes.MouseY) {
        rotationX-= Input.GetAxis ("Mouse Y") * sensitivityVert;
        rotationX = Mathf.Clamp (rotationX, minimumVert, maximumVert);
        float rotationY = transform.localEulerAngles.y;

        transform.localEulerAngles = new Vector3 (rotationX, rotationY, 0);

    }

}

这段代码实际上是有效的,但反过来说,当我向上移动鼠标时,当我向下移动时,对象会向下和向上旋转。我发现是rotationX-= Input.GetAxis ("Mouse Y") * sensitivityVert; 导致了问题,所以我将其更改为rotationX+= Input.GetAxis ("Mouse Y") * sensitivityVert;,现在它的旋转真的很奇怪!我确保它只在垂直轴上旋转,但它在所有方向上旋转,即即使在水平轴和 z 轴上。 有人可以告诉我哪里出错了吗?谢谢你

【问题讨论】:

  • 你试过用sharpgl旋转吗?
  • 不,我想这样做
  • 您是在 Vector.Zero 轮换工作吗?或者您尝试旋转的对象是否有一些默认旋转。
  • 如果 (axes == RotationAxes.MouseY) 返回 false。请简化您的代码

标签: c# unity3d


【解决方案1】:

对我来说很好用。我清理了您的代码并将 Y 约束为其初始值。

public class rotateX : MonoBehaviour
{
    public float sensitivityVert = 9.0f;

    private float rotationX = 0;
    public float minimumVert = -45.0f;
    public float maximumVert = 45.0f;

    Vector3 initial;

    void Start()
    {
        initial = transform.localEulerAngles;
    }

    // OnMouseDown is called when the user has pressed the 
    // mouse button while over the GUIElement or Collider.
    protected void OnMouseDown()
    {
        sign = -sign;
    }
    float sign = -1f;

    void Update()
    {
        rotationX += sign * Input.GetAxis("Mouse Y") * sensitivityVert;
        //rotationX = Mathf.Clamp(rotationX, minimumVert, maximumVert);

        transform.localEulerAngles = new Vector3(rotationX, initial.y, 0f);
    }
}

立方体围绕其枢轴上下旋转。

【讨论】:

  • 对我也有用!但是由于rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;,当我向上移动鼠标时,游戏对象向下看,而当我向下移动鼠标时,对象向上看!!怎么办?
  • 我目前没有打开统一,但你可以在 Vector3 分配中使用 -rotationX,就像这样 transform.localEulerAngles = new Vector3(-rotationX, initial.y, 0f); 这应该会翻转标志。
  • 是的,在发布这个问题之前,我已经尝试了很久!当我这样做时,旋转的行为非常奇怪
  • 好吧,不要那样做。保持代码不变,或者像我刚才所做的那样注释掉夹子,看看它工作正常。走到立方体的另一边,当你向上看时它会向上旋转,当你向下看时它会向下旋转。或者,如果您不能移动,请将 -= 更改为 +=,但如果您可以移动并且您位于立方体的错误一侧,则会产生相同的效果。
  • @MR.JOIS 向旋转脚本添加了单击处理程序。现在您可以单击立方体来更改旋转方向。确保你的立方体(对象)上有一个活动的对撞机。
猜你喜欢
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多