控制物体的运动相关脚本

一、Debug.Log()

用于向Console(控制台)窗口输出一串信息。

例如:

在Start函数中加入:Debug.Log("组件执行开始函数");

在Update函数中加入:Debug.Log("当前游戏进行时间:"+Time.time);

运行游戏,选择主菜单的Window->General->Connsole,Console窗口中会产生大量信息

罚下开始函数值执行了一次,后民的都是Update函数调用时输出的,会发现时间的流逝不太稳定,特别是在游戏启动的时候偏差较大。

Debug.Log()函数是写代码、查bug的好帮手,要熟练掌握

二、修改物体的位置

在Unity中修改物体的位置,就是修改Transform(变换)组件的数据。在Inspector窗口可以查看和修改Transform组件的Position、Rotation、Scale参数,在脚本里也可以

有两种常用方法:

使用Translate()函数

//物体将沿着自身右侧方向(X正方向也称为右)前进1.5个单位

transform.Translate(1.5f,0,0);

直接指定新的位置

tranform.position=new Vector3(1,2.5f,3);

这里可能有两个让人觉得奇怪的地方:2.5携程2.5f,设置位置时用new Vector3(x,y,z)这种写法

主要是因为C#的规定。直接写2.5会被认为是一个double数据,而这里需要float类型数据,所以要加上f。而写new的原因是Vector3是一个值类型,position是一个属性,由于引用和值的原理,这里不能用"transform.position.y=2.5f"

一般在Update函数中修改物体的位置来实现运动,这两种方法都可以。不过由于系统繁忙时无法保证稳定的帧率,如果按照上述写法,帧率就与速度成正比了。但按照游戏开发的常规方法,应当选择"每秒移动相同的距离"。例如:60帧时,每帧移动0.1米;那么30帧时,每帧就应该移动0.2米。只用将上述代码稍稍修改就可以实现了

transform.Translate(1.5f*Time.deltaTime,0,0);

Time.deltaTime表示两帧之间的间隔,用它乘以速度就可以抵消帧率变化的影响。由于它比较小,因此速度的数值应适当放大一些

三、读取和处理输入

Unity支持多种多样的输入设备,如键盘、鼠标、手柄、触摸屏等。以下代码就可以获取用户当前的纵轴输入和横轴输入

voidUpdate(){

float v=Input.GetAxis("Vertical");//垂直方向

float h=Inpu.GetAxis("Horizontal");//水平方向

Input.GetAsix()函数的返回只是一个float类型的值,(取值范围为-1~1).Unity用这种方法将各种不同的输入方法统一在了一起

通过简单的乘法就可以将输入的幅度与物体运动的速度联系起来

transform.Translate(h*10*Time.deltaTime,0,v*10*Time.deltaTime);

四、实例:实现一个移动小球

  1. 新建一个球体
  2. 调整摄像机位置
  3. 为球体创建脚本Ball并挂载,代码如下

using UnityeEngine;

public class Ball:MonoBehaviour{

    public float speed=10;   //public字段可以在inspector界面中显示,并修改其值

    void Start(){

     }

    void Update(){

               float v=Input.GetAxis("Vertical");

               float h=Input.GetAxis("Herizontal");

               transform.Translate(h*speed*Time.deltaTime,0,v*speed*Time.deltaTime);

         }

}

猜你喜欢

转载自blog.csdn.net/m0_63024355/article/details/130448381
今日推荐