Unity问答

Unity3D中GameObject如何保持预订速率向前移动

Posted on 2013年03月20日 by U3d / Unity3D 基础教程 /被围观 1,901 次

Unity3D中这个脚本是检查垂直轴的按钮是否被按下和释放。然后,将增量加上垂直输入的值加上添加的油门变量设置为使GameObject移动的速率。

脚本如下:

using UnityEngine;
using System.Collections;public class ThrottleController : MonoBehaviour
{
//The game object's Transform
private Transform goTransform;
//the throttle increment to the current velocity
private float increment=0.0f;
//this variable stores the vertical axis values
private float vertAxis=0.0f;
//the throttle
private float throttle =0.0f;void Awake ()
{
//get this game object's Transform
goTransform = this.GetComponent();
}

void Update ()
{
//Get the vertical input value and store it at the vertAxis variable
vertAxis = Input.GetAxis("Vertical");

//change the 'increment' value based on the vertical input
if(vertAxis>0)
{
increment = 0.05f;
}
else if(vertAxis<0)
{
increment = -0.05f;
}

//after releasing the vertical axis, add the increment the throttle
if(Input.GetButtonUp("Vertical"))
{
throttle = throttle+increment;
}

//set the throttle limit between -0.05f (reverse) and 0.25f (max speed)
throttle=Mathf.Clamp(throttle, -0.05f,0.25f);

//translates the game object based on the throttle
goTransform.Translate(throttle * Vector3.forward);

//rotates the game object, based on horizontal input
goTransform.Rotate(Vector3.up * Input.GetAxis("Horizontal"));
}
}

首先要声明goTransform为Transform变量(例如第7行),之后在代码中存储GameObject的Transform将被用到。下面,有3个浮点数被声明并初始化:increment ,改变油门的值。

vertAxis,存储键盘输入结果,在1到-1之间。

throttle,GameObject的移动速率(例如第10,12,14行)。

然后,在Awake()方法中有一行初始化goTransform的代码(例如19行)。剩下的都在Update()方法中运行。

verAxis变量就是垂直轴输入的值(例如25行)。使用if-else语句来判断verAxis是正还是负,如果为正,increment就被设置为0.05f,如果为负,increment就等于-0.05f(例如第28到35行)。

最后一个if语句在垂直输入按钮被释放时,把increment值加到throttle变量。(例如第38到41行)。使用第44行代码,玩家可以更好的控制油门,不会直接到最大值或最小值。因为throttle是以0.05为基数改变的,在-0.05到0.25f的范围内都是可以的,并且有5个不同速度可以控制GameObject向前移动。

Unity3D中GameObject如何保持预订速率向前移动:等您坐沙发呢!

发表评论