2.5.2 控制飞船移动

来源:互联网 发布:微信小号矩阵 编辑:程序博客网 时间:2024/04/29 14:03
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">


注意: 只有 public 类型的属性才能在编辑器窗口中实例化。











0 0
原创粉丝点击