经过前三章的介绍,我们终于搞定了游戏界面,从本章开始,我将带大家创造游戏世界!作为一个游戏爱好者,最熟悉的莫过于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上,如下图所示
二、新建脚本,绑定到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