所以我已经完成了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);
}
}
好的,所以发生的事情是,当我移动鼠标时球正在转动,如果我使用箭头键,球正在滚动,但是在经过一些试验和错误之后,我无法弄清楚是要获得球朝着它转动的方向移动。
您将如何处理此特定情况?任何帮助都是非常受欢迎的人。
答案 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)
}