using UnityEngine;
using System.Collections;
[AddComponentMenu("MyGame/Player")] // 为了便于管理脚本,自定义脚本在菜单栏中的位置
public class Player : MonoBehaviour
{
// 速度
public float m_speed = 1;
</pre><pre name="code" class="cpp"> // Update is called once per frame
void Update ()
{
// 纵向移动距离
float movev = 0;
// 水平移动距离
float moveh = 0;
// 按上键
if(Input.GetKey(KeyCode.UpArrow))
{
//movev = movev - m_speed * Time.deltaTime;
movev -= m_speed * Time.deltaTime;
}
// 按下键
if(Input.GetKey(KeyCode.DownArrow))
{
movev += m_speed * Time.deltaTime;
}
// 按左键
if(Input.GetKey(KeyCode.LeftArrow))
{
moveh += m_speed * Time.deltaTime;
}
// 按右键
if(Input.GetKey(KeyCode.RightArrow))
{
moveh -= m_speed * Time.deltaTime;
}
// 移动
this.transform.Translate(new Vector3(moveh, 0, movev));
}
}
Input是一个包装了输入功能的类,它包括了所有的键盘、鼠标或者触控操作函数。
Time.deltaTime 表示每帧的经过时间,那些需要每帧做增减变动的数值都需要乘上Time.deltaTime。
this.transform 调用的是游戏体的Transform组件,Transform 组件提供的主要功能是和移动、旋转、缩放游戏体有关的。Translate函数移动游戏体,其中
Vector3类型的参数,用x,y,z三个方向上的移动距离。
实战方法:
Update函数中每帧都去调用this.transform组件,会造成一定的效率问题,我们可以在对象初始化时候只调用一次并且将其保存起来。
注意: MonoNBehaviour 的派生类不能使用构造函数初始化。
using UnityEngine;
using System.Collections;
[AddComponentMenu("MyGame/Player")] // 为了便于管理脚本,自定义脚本在菜单栏中的位置
public class Player : MonoBehaviour
{
// 速度
public float m_speed = 1;
</pre><pre name="code" class="cpp"> <span style="white-space:pre"> protected Transform m_transform;</span>
</pre><pre name="code" class="cpp"> // Use this for initialization
void Start ()
{
<span style="white-space:pre"> </span>// Debug.Log ("sjt");
m_transform = this.transform;
}
<span style="white-space:pre"> </span><pre name="code" class="cpp"><span style="white-space:pre"> </span>// Update is called once per frame
void Update ()
{
<span> </span> // 纵向移动距离
float movev = 0;
// 水平移动距离
float moveh = 0;
// 按上键
if(Input.GetKey(KeyCode.UpArrow))
{
//movev = movev - m_speed * Time.deltaTime;
movev -= m_speed * Time.deltaTime;
}
// 按下键
if(Input.GetKey(KeyCode.DownArrow))
{
movev += m_speed * Time.deltaTime;
}
// 按左键
if(Input.GetKey(KeyCode.LeftArrow))
{
moveh += m_speed * Time.deltaTime;
}
// 按右键
if(Input.GetKey(KeyCode.RightArrow))
{
moveh -= m_speed * Time.deltaTime;
}
// 移动
// this.transform.Translate(new Vector3(moveh, 0, movev));
this.m_transform.Translate(new Vector3(moveh, 0, movev));
// 这样程序就不用每帧去查找Transform组件,提高效率。
}
}
</pre><pre name="code" class="cpp">