用鼠标和键盘在刚体球体上进行局部运动

时间:2013-11-14 12:29:30

标签: c# unity3d input geometry

所以我已经完成了Unity的滚球教程,这是一个小型游戏,它使用了一个带有刚体的球体,并找到了一些基本的移动脚本here

我现在想要的是更进一步,介绍一个更高级的移动脚本,它还可以播放鼠标输入。

我想要实现的是基于局部轴添加力,所以如果我向左移动鼠标,则球转动并且力被添加到该方向。让我展示一下我提出的代码(添加到应用了刚体的简单球体):

using UnityEngine;
using System.Collections;

public class playerController : MonoBehaviour {

    public float turnSpeed = 2.0f;
    public float moveSpeed = 250.0f;

    void FixedUpdate() {

        float h = turnSpeed * Input.GetAxis("Mouse X");
        transform.Rotate(0, h, 0);

        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
        rigidbody.AddForce(movement * moveSpeed * Time.deltaTime);

    }

}

好的,所以发生的事情是,当我移动鼠标时球正在转动,如果我使用箭头键,球正在滚动,但是在经过一些试验和错误之后,我无法弄清楚是要获得球朝着它转动的方向移动。

您将如何处理此特定情况?任何帮助都是非常受欢迎的人。

2 个答案:

答案 0 :(得分:0)

我设法绕过这个并分享给别人看。

我引用相机GameObject并在键上使用camera.transform。猜猜它真的很基本但仍然。

public GameObject Camera;
public float moveSpeed = 0.0f;

if (Input.GetKey ("right") || Input.GetKey ("d")) {
    rigidbody.AddForce( Camera.transform.right * moveSpeed * Time.deltaTime);
}

if (Input.GetKey ("left") || Input.GetKey ("a")) {
    rigidbody.AddForce( -Camera.transform.right * moveSpeed * Time.deltaTime);
}

if (Input.GetKey ("up") || Input.GetKey ("w")) {
    rigidbody.AddForce( Camera.transform.forward * moveSpeed * Time.deltaTime);
}

if (Input.GetKey ("down") || Input.GetKey ("s")) {
    rigidbody.AddForce( -Camera.transform.forward * moveSpeed * Time.deltaTime);
}

答案 1 :(得分:0)

像这样的东西应该做的技巧::

if (Input.GetKey ("up") || Input.GetKey ("w")) {
    rigidbody.AddForce( Camera.transform.forward * moveSpeed * Time.deltaTime);
    rigidbody.AddRelativeTorque(vector3.right * speed)
    //Note that rotation happens around the axis, so when moving (forward orback you will rotate on the vector3.right/left) and when moving( Right/left you will use the vector3.forward/back)
}