第一种,通过transform.Translate移动
public class MoveTest01 : MonoBehaviour {
public GameObject cube;
void Update () {
if (Input.GetKey(KeyCode.W))
{
cube.transform.Translate(Vector3.forward * Time.deltaTime);
}
if (Input.GetKey(KeyCode.S))
{
cube.transform.Translate(Vector3.back * Time.deltaTime);
}
if (Input.GetKey(KeyCode.A))
{
cube.transform.Translate(Vector3.left * Time.deltaTime);
}
if (Input.GetKey(KeyCode.D))
{
cube.transform.Translate(Vector3.right * Time.deltaTime);
}
}
}
第二种,通过给Rigdbody添加一个力来实现移动
public class MoveTest02 : MonoBehaviour {
//这个方法会受到物理因素的影响
public GameObject sphere;
public Rigidbody sphereRigdbody;
void Update () {
if (Input.GetKey(KeyCode.W))
{
sphereRigdbody.AddForce(Vector3.forward*15f*Time.deltaTime, ForceMode.Impulse);
}
if (Input.GetKey(KeyCode.S))
{
sphereRigdbody.AddForce(Vector3.back*15f * Time.deltaTime, ForceMode.Impulse);
}
if (Input.GetKey(KeyCode.A))
{
sphereRigdbody.AddForce(Vector3.left*15f * Time.deltaTime, ForceMode.Impulse);
}
if (Input.GetKey(KeyCode.D))
{
sphereRigdbody.AddForce(Vector3.right*15f * Time.deltaTime, ForceMode.Impulse);
}
}
}
第三种,通过获取水平轴和垂直轴来移动
public class MoveTest03 : MonoBehaviour {
public int speed = 5;
public float H;
public float V;
void Update () {
H = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
V = Input.GetAxis("Vertical") * Time.deltaTime * speed;
this.gameObject.transform.Translate(H, 0, V);
}
}
如果用摇杆:
H = joystick.Horizontal * Time.deltaTime * speed;
V = joystick.Vertical * Time.deltaTime * speed;
this.gameObject.transform.Translate(H, 0, V);
第四种CharacterController带重力,并移动角色脚本
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {
CharacterController cc;
public float gravity=0.5f;
public float speed=1.0f;
public float jumpSpeed=8.0f;
private Vector3 moveDirection= Vector3.zero;
// Use this for initialization
void Start () {
cc=GetComponent<CharacterController>();
}
// Update is called once per frame
void Update () {
if (cc.isGrounded) {
// We are grounded, so recalculate
// move direction directly from axes
//我们着地了,所以直接通过轴重新计算move direction。
float h = Input.GetAxis ("Horizontal");
float v = Input.GetAxis ("Vertical");
if (Mathf.Abs (JoyStick.h) > 0.1f || Mathf.Abs (JoyStick.v) > 0.1f) {
h = JoyStick.h;
v = JoyStick.v;
}
if (Mathf.Abs (h) > 0.1f || Mathf.Abs (v) > 0.1f) {
Vector3 targetpos = new Vector3 (h, 0, v);
//print (targetpos);
transform.LookAt (targetpos + transform.position);
cc.SimpleMove (transform.forward * speed);
}
} else {
//先落地
moveDirection.y -= gravity * Time.deltaTime;
cc.Move(moveDirection * Time.deltaTime);
//print (Time.deltaTime);
}
}
}