和小伙伴们一起学Unity3D(四)角色移动之Transform

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

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

        本章要点:

                        1、Transform类

                        2、Input类 

一、Transform类

        Transform类包含了所有物体的位置、旋转和缩放信息   ,作为GameObject(Unity场景里面所有实体的基类)的属性之一,同时控制着物体的位移,旋转和缩放

        常用的属性包括

                position物体在世界坐标轴下的位置

                right、up、forword物体自身坐标轴下的X轴Y轴Z轴

                rotation物体自身的旋转角度

         常用的方法有

                  1、Translate控制物体的平移

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

                      理解为每秒运动的距离

                  2、Rotae控制物体的旋转

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

                  注意,这里我只列举了最简单的方法,Translate和Rotae方法还有许多重载的方法,大家想了解的话可以去查文档或者留言问我

二、Input类

        使用这个类能够读取输入管理器设置的按键,以及访问移动设备的多点触控或加速感应数据。 在这里我只介绍本节所需的几个重要函数

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

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上,如下图所示

和小伙伴们一起学Unity3D(四)角色移动之Transform_第1张图片

二、新建脚本,绑定到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);
	}
}


 

完整项目,包含三个点之间移动的脚本,希望对大家有帮助.http://download.csdn.net/detail/yy8245075/5995803

你可能感兴趣的:(从零开始Unity3D)