【问题标题】:How can i turn the camera to left and right in unity for a sphere?我怎样才能将相机向左和向右转动以统一为一个球体?
【发布时间】:2014-12-21 07:51:04
【问题描述】:

更新的代码..问题是我不能移动球只有当我按住 E 按钮而不是我使用 WASD 或箭头来移动球时......当我按住 Q 时相机 2 激活并且我可以移动带有 WASD 或箭头的球...但是该角度的右轴...就像那个游戏的平衡...我不想握住 E 或 Q 只是为了改变相机并正确地移动球到那个角度球的右轴,但不按住相机按钮

使用 UnityEngine; 使用 System.Collections;

公共类 controlPlayer : MonoBehaviour {

public float viteza ; // this is speed
  ;


 void Start(){

}
void Update()
{  


    if(Input.GetKey(KeyCode.Q) )  // if i hold Q the camera 2 activates and with WASD i can move the ball

    {  
        float miscaOrizontal = Input.GetAxis("Horizontal");
        float miscaVertical = Input.GetAxis("Vertical");
        Vector3 miscare = new Vector3(miscaVertical,0.0f,(-miscaOrizontal)); //also here i chande the axis for the camera 2
        rigidbody.AddForce(miscare * viteza * Time.deltaTime);

    }    
    if(Input.GetKey(KeyCode.E) ) // here when i press E the camera 1 activates and alos i can move the ball if i keep pressing E

    {   float miscaOrizontal2 = Input.GetAxis("Horizontal");
        float miscaVertical2 = Input.GetAxis("Vertical");
        Vector3 miscare2 = new Vector3(miscaOrizontal2,0.0f,miscaVertical2); // here are the controls for the ball for the camera ..i had to change the axis here..
        rigidbody.AddForce(miscare2 * viteza * Time.deltaTime);

    }


}






}

}

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    好的,如果我的理解正确,您希望球相对于相机当前面向的方向移动。并且您不想在使用 WASD 控件移动球时按住“Q”或“E”。

    所以我想在这里提到一些事情,所以我们会一次说一件。首先,您不应该在 Update 调用中包含“AddForce”。只要有可能,每帧都会调用更新。它非常适合输入,但通常您希望在“FixedUpdate”中调用它。它在许多设备上提供了更好的响应。如果您将其保留在更新状态,您可能会得到不准确的物理结果,并错过碰撞。关于这个主题有很多,所以如果你想了解更多,那么只需谷歌一会儿。

    至于代码方面,您希望存储对您正在使用的相机的引用,以避免必须按住这些按钮。

    我的意思是:

    private Camera referencedCamera = null;
    
    private void Start()
    {
        referencedCamera = camera1;
    }
    
    private void Update()
    {
        if(Input.GetKey(KeyCode.Q)) referencedCamera = camera2;
        else if(Input.GetKey(KeyCode.E)) refrencedCamera = camera1;
    }
    

    通过这种方式,您可以参考正在使用的相机,而不是按键输入。其他需要研究的是“状态设计模式”。下面是关于“状态设计模式”的视频。这是 Derek Banas 关于设计模式的一个很棒的视频教程系列,非常推荐观看它们,但状态模式也可能为您解决这个问题。所以这应该注意不必按住按钮才能进行移动。或多或少,这些按钮现在允许您切换当前正在使用的相机。

    https://www.youtube.com/watch?v=MGEx35FjBuo

    既然解决了这个问题,您想要转换您当前拥有的输入,并且您想要将其放在当前使用的相机方面。所以为了避免一遍又一遍地重写很多代码,只要知道这两个代码sn-ps应该拼成一个。所以“referencedCamera”应该已经在我要写的代码中定义好了:

    private void FixedUpdate()
    {
        if(referencedCamera != null)
        {
            float miscaOrizontal = Input.GetAxis("Horizontal");
            float miscaVertical = Input.GetAxis("Vertical");
            Vector3 miscare = referencedCamera.transform.TransformDirection(
                new Vector3(miscaVertical, 0.0f, -miscaOrizontal));
            rigidbody.AddForce(miscare * viteza * Time.deltaTime);
        }
    }
    

    所以现在有了这个,它是相同的代码吗,但是调用了引用的相机变换,以从输入中获取向量 3 并将其与相机相关联,并将新的关系向量添加到对象。

    我还想建议您查看事件而不是检查更新功能,但这超出了问题的范围。希望这对您有所帮助,如有任何问题,请随时提问。

    编辑 经过进一步讨论,我们发现了一些也应该提到的东西。如果您参考的相机是倾斜的,则力将以该角度施加,因此请记住这一点。如果它向下指向一个物体,那么相对于相机的前方将向下施加一个力,而不是完全在你可能认为的向前方向上。觉得值得一提。

    【讨论】:

    • 不会让我在这里不知道为什么有些拼写错误...所以我放在这里textuploader.com/o285
    • 如果相机向下倾斜,请将其调平。我必须回去工作,所以任何进一步的帮助都需要稍后。如果它向下倾斜,力实际上会部分推到地板上,这可能是问题所在。
    • allrite 确定我们稍后再谈...尝试让这个游戏正常运行...我的相机角度是这样的 x = 59.67914 y = 0 和 z = 0..所以这就是为什么球就是这样……她以某种方式进入了地面……好吧,我无法更换相机……我希望相机就像在天空中的 rts 游戏中一样,并且稍微旋转到地面,所以我不能看看天空...我想知道我是否可以从那个相机和第二个相机给球一个 X ..一个 x = 0 那会很棒...
    • 评论不用于扩展讨论;这个对话是moved to chat
    猜你喜欢
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2016-09-14
    • 1970-01-01
    • 2015-01-05
    • 2013-07-29
    相关资源
    最近更新 更多