Unity C#当玩家转身时如何转动物品

时间:2013-12-01 05:22:13

标签: c# rotation unity3d quaternions

我对团结很陌生,但我有一个基本的FPS游戏,当拿着枪时,我想这样做,当你的玩家转动时,手中的物品旋转显示转动。例如,在玩任务时,当您旋转角色时,枪会旋转。这是我的代码,但它无法正常工作

    void Update(){
    this.rotateEquppedOnTurn();
}
private void rotateEquppedOnTurn(){
    if(this.equippedItem != null){
        InteractEquppableItem equip = this.equippedItem.gameObject.GetComponent<Interaction>() as InteractEquppableItem;
        if(equip.rotatesWhenTurn){
            float rotX = Input.GetAxis("Mouse X");
            float rotY = Input.GetAxis("Mouse Y");
            Quaternion tempRot = new Quaternion();
            Quaternion tempCam = GameObject.Find("PlayerCamera").transform.rotation;
            tempRot.x = tempCam.x + rotX;
            tempRot.y = tempCam.y + rotY;
            tempRot.z = tempCam.z;
            this.equippedItem.gameObject.transform.rotation = tempRot;
        }
    }
}

当用这段代码转动角色时,枪只是以一种奇怪的方式旋转,这不是我对旋转脚本的预期

2 个答案:

答案 0 :(得分:1)

  1. Quaternions不是vectors
  2. 我建议你先看看Unity网站上的vector tutorial
  3. 本教程的最后一部分介绍了cross products是什么以及为什么要使用它们 - 具体来说,您可以使用它们来获取您可能想要旋转某些东西的相对轴。

答案 1 :(得分:0)

不要像这样直接指定旋转。

this.equippedItem.gameObject.transform.rotation = tempRot;

而不是使用像这样的东西

  

this.equippedItem.gameObject.transform.Rotate(new Vector3(x,y,z));

您可以使用鼠标移动来导出x,y,z