经过前三章的介绍,我们终于搞定了游戏界面,从本章开始,我将带大家创造游戏世界!作为一个游戏爱好者,最熟悉的莫过于WASD键,它控制着人物行走,带我们认识游戏世界,那么在Unity3D中我们如何控制人物行走移动呢?

本章目标:使用Transform控制物体行走。W、S控制物体向前向后行走,A、D控制物体转视角,

        本章要点:

                        2、Input类 

一、Transform类

       

        常用的属性包括



void Update() {
		transform.Translate(Vector3.forward * Time.deltaTime);
		transform.Translate(Vector3.up * Time.deltaTime, Space.World);
	}

                      小写的transform是因为它作为GameObject的属性之一存在,Vector3.forword即向量(0,0,1)的简写,Space.Word指世界坐标轴,乘上Time.deltaTime可以

为每秒运动的距离



void Update() {
		transform.Rotate(Vector3.right * Time.deltaTime);
		transform.Rotate(Vector3.up * Time.deltaTime, Space.World);
	}




二、Input类

使用这个类能够读取输入管理器设置的按键,以及访问移动设备的多点触控或加速感应数据。

         1、GetKeyDownGetKeyGetKeyUp分别在按键按下,按住和抬起时触发

void Update()
        {
            if (Input.GetKeyDown(KeyCode.A))
                print("A key was pressed");

            if (Input.GetKey(KeyCode.A))
                print("A is held down");
            if (Input.GetKeyUp(KeyCode.A))
                print("A key was released");
        }

 

         2、GetAxis如果你使用Input制作某种运动行为可以使用Input.GetAxis方法,它能够控制物体运动的方向。"Horizontal" 和"Vertical" 映射于控制杆、A、W、S、D和箭头键

             (方向键)。 "Mouse X" 和"Mouse Y" 映射于鼠标,"Fire1", "Fire2" "Fire3"映射于键盘的Ctrl、Alt、Cmd键和鼠标中键或控制器的按钮。新的输入设置可以使用输入管理 

               器来添加。

              注意:每次输入在"Update()"之前不会再更新,所以建议你将所有的输入调用都写在Update方法中。

介绍完本节的知识点,下面我们就来完成本章的目标:使用Transform控制物体行走。W、S控制物体向前向后行走,A、D控制物体转视角

一、创建地形,在地形上新建一个Cube

导入Scripts包,选中主摄像机,在Component菜单下选择Camera-Control——>Smooth Follow,将Cube拖到target上,如下图所示

unity spine TrackEntry是否在进行中 unity transport_Time

二、新建脚本,绑定到Cube上

public class InputCtrol : MonoBehaviour {
    public int speed = 2;
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
        if (Input.GetKey(KeyCode.W))
        {
            //transform.Translate(transform.forward* speed * Time.deltaTime,Space.World);
            transform.Translate(Vector3.forward * speed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.S))
        {
            //transform.Translate(-Vector3.forward * speed * Time.deltaTime, Space.World);
            transform.Translate(-Vector3.forward * speed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.A))
        {
            transform.Rotate(-Vector3.up);
        }
        if (Input.GetKey(KeyCode.D))
        {
            transform.Rotate(Vector3.up);
        }
	}
}

或者一种更简单的方法

using UnityEngine;
using System.Collections;

public class CubeControl : MonoBehaviour {
    public int speed=10;
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {

        transform.Translate(new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"))*speed*Time.deltaTime);
	}
}

 

完整项目,包含三个点之间移动的脚本,希望对大家有帮助.