1.简单的砖块实例

Input.GetAxis("Horizontal")
Input.GetAxis("Vertical")

(1)对Input.GetAxis中的Horizontal、Vertical的理解:
先看一个图:
在这里插入图片描述我们平时所说的Horizontal 这个水平轴其实就是X轴,也就是键盘上的AD键或是左右箭头,可以想象一下当你按下AD键时,物体就在X轴方向水平移动;而我们所说的Vertical 这个轴,其实是图中的Z轴,而不是图中的Y轴,当我们按下键盘上的WS键也就是前进后退键,其实物体是在Z轴进行移动。而图中的Y轴,才是真正的垂直轴,可以在Y轴上加入一个值,用来充当一个物体的重力分量。

(2)GetAxis()的作用:获取鼠标或者键盘消息

参数:

  • 触屏类
参数触发要求
Mouse X鼠标沿着屏幕X移动时触发
Mouse Y鼠标沿着屏幕Y移动时触发
Mouse ScrollWheel当鼠标滚动轮滚动时触发
  • 键盘操作类
参数触发要求
Vertical对应键盘上面的上下箭头,当按下上或下箭头时触发
Horizontal对应键盘上面的左右箭头,当按下左或右箭头时触发
Time.deltaTime * moveSpeed

上面的位移量通过movespeed * Time.deltaTime方式获取。
理解:
比如定义的movespeed = 1,,意思是角色速度为1米/秒,

那么如果moveh += movespeed ,就默认了经过了1秒的时间水平方向移动了1米。

这个时候请注意,这个函数是多长时间调用一次呢?答案是:1帧,而不是1秒,

那么一帧有多久呢?也就几十毫秒吧,准确的时间就是Time.deltaTime(它表示距上一次调用Update或FixedUpdate 所用的时间)。所以说用movespeed * Time.deltaTime,就是这么几十毫秒,应该移动的距离。

this.transform.Translate (h, v, 0)
Input.GetButtonUp ("Fire1")

GetButtonUp:在指定按钮被松开时立刻触发指定event.

注意,按钮名称需要自行输入,必须严格与Input面板中的名称对应,请注意大小写规范以及是否空格。

按钮(Button)的概念在Unity3D中比较特殊。并不一定专指鼠标按键、键盘或者手柄,而是通过预先的定义可以囊括一系列不同的按键,以方便使用。

从菜单Edit > Project Settings > Input可以打开Input面板:
在这里插入图片描述这里指定了18个不同的Axes,可以理解为“轴向值”。Name是这个轴向的名称,Positive Button和Alt Positive Button中所指定的按键被按下时,该轴向的值迅速增长到1,Negative Button和Alt Negative Button中所指定的按键被按下时,该轴向的值迅速减少为-1,无任何按键被按下时,轴向值迅速归0。

而Button就是指的轴向中所规定的所有按键。比如这个叫做Horizontal的轴向,我们可以理解为“横向输入按钮”,当键盘left、right键或a、d键被按下时,就相当于“横向输入按钮”被按下了。

我们经常会使用到的Button有:

使用Horizontal、Vertical来设置运动方向或旋转方向
使用Fire1来控制攻击行为
使用Jump来控制跳跃
使用Cancel来取消或者呼出游戏菜单

我们还可以自己增加更多的Axes。

Instantiate (bullet,
this.transform.position,
this.transform.rotation) as Rigidbody

Instantiate函数是unity3d中进行实例化的函数,也就是对一个对象进行复制操作的函数,这个函数共有五个重载(overloaded)函数,对这五个函数的理解不清楚的话产生的效果也不相同,现在对这五个函数做一定的理解。

先附上unity3d API 中对这个函数的描述:

在这里插入图片描述
Instantiate函数实例化是将original对象的所有子物体和子组件完全复制,成为一个新的对象。这个新的对象拥有与源对象完全一样的东西,包括坐标值等。
original:用来做复制操作的对像物体,源对象;
position:实例化的对象的位置坐标;
rotation:实例化的对象的旋转坐标(旋转四元数);
parent:实例化对象的父对象,就是给这个实例化对象找的爹,在完成实例化函数处理后,实例化对象将在父对象下,是父对象的子对象;

instantiateWorldSpace(老的叫WorldSpaceStays):这个值为TRUE,表示实例化对象相对于世界坐标系的位置(是位置,不是坐标值,比如实例化前在Canvas左上角,实例化后还在左上角)不变,相对于父对象的坐标值变了。为false,表示实例化对象相对于父对象的坐标值不变,但在世界坐标系中的位置变了。

this.transform.TransformDirection (Vector3.forward)
public Vector3 TransformDirection(Vector3 direction);  
public Vector3 TransformDirection(float x, float y, float z);  

从自身坐标到世界坐标变换方向(这个强调的是方向)这个操作不会受到变换的缩放和位置的影响。

instance.AddForce (forward * power)

unity3D中通过 rigidbody.AddForce(x,y,z)方法添加力的作用,该方法的参数是施加力的方向,参数大小代表了力的大小。
Rigidbody.velocity
这个方法是瞬间给物体一个恒定的速度,将物体提升至该速度。

Rigidbody.addForce
这个方法瞬间给物体一个规定好的力

这两者有什么不同呢?
举个例子大家就明白了:

假设我们想要做一个2D的跳跃游戏,在这个游戏里我希望我按下跳跃键的时候,游戏物体的跳跃高度是恒定的。那么,如果此时我使用的是addForce显然不会满足我的效	果,因为经过测试,
每按一下跳跃键,它会被施加一个恒定的力,它跳跃的初始速度会越变越大,
每次跳跃的高度和前一次相较变得越来越大(在连续跳跃的情况下),也就是可以理解成,我现在被施加了一个
大小为50的力,在重力作用下我的力的效果在减小,在正向速度还没有完全消失的情况下,此时我又按了一下跳跃键,那么就会在这个力的基础上再施加一次大小为50的力,物体会越跳越快,越跳越高。
而此时如果我们使用的是velocity方法改变它的初始速度到我们希望的值和方向,那么当我们按下跳跃键的时候,无论此时物体减速到何种情况,也最多只会提升到我们规定的速度以及朝向我们规定的方向。
初始速度不变的情况下,跳跃高度也是恒定的。

这就是他们两个的区别,一个是持续施加,一个是有限施加。
具体的游戏例子来自“涂鸦跳跃”,感兴趣的朋友可以尝试下,它使用的就是velocity方法:
 Destroy (this.gameObject, 3f)

Destroy ()是主要用于销毁游戏对象以及组件,但不会再引用那个被销毁的对象。

格式:

①Destroy (GameObject);

②Destroy (GameObject,time);

说明:

(1)GameObject 是销毁的游戏对象,也可以是Prefab预制体。

(2)time 是销毁游戏对象的指定时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值