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

        本章要点:

                        2、Input类 

一、Transform类

       

        常用的属性包括

[csharp] view plain copy print ?

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可以

为每秒运动的距离

[csharp] view plain copy print ?

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




二、Input类

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

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


[csharp] view plain copy print ?

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中如何使人物移动手感更好 unity3d人物移动_游戏界面

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


[csharp] view plain copy print ?

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);
        }
	}
}

或者一种更简单的方法


[csharp] view plain copy print ?


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);
	}
}