内容简介:前面文章介绍实现制作子弹和发射子弹,也达到相应效果,但是你也许看到代码里,还有一些不明白的地方,本文就来解决这个问题。比如代码里有这么一行:Invoke("Kill", life);这行代码,对于你也许很陌生,因为没有看到这个函数Invoke(),这个函数定义如下:
前面文章介绍实现制作子弹和发射子弹,也达到相应效果,但是你也许看到代码里,还有一些不明白的地方,本文就来解决这个问题。比如代码里有这么一行:
Invoke("Kill", life);
这行代码,对于你也许很陌生,因为没有看到这个函数Invoke(),这个函数定义如下:
public void Invoke(string methodName, float time);
这个函数返回值为空,输入两个参数,第一个参数methodName是一个函数的名称,这个函数不能有参数;第二个参数time是延时多长时间后调用。上面这行语句,它的意思就是延时life时间之后调用Kill()函数,也就是5秒钟之后把对象删除掉。
使用Invoke方法需要注意以下三点:
1、它应该在Start,Update,FixUpdate,LateUpdate,还有OnGUI中被调用
2、Invoke中传递的方法不能是含有参数的方法、
3、当Time.ScaleTime = 0时,Invoke()无效,调用不到Invoke方法
如果想重复调用一个函数,可以使用下面的函数
public void InvokeRepeating(string methodName, float time, float repeatRate);
前面两个参数与上面的函数是一样的,最后面的参数repeatRate是表示间隔多少秒再执行一次。
InvokeRepeating("SendMessage",2,3);
表示在“2s”以后开始调用第一次,之后每隔“3s”重复调用一次。
接着下来,我们看这一句语句:
if (Input.GetButtonDown("Fire1") && Time.time > lastFireTime + reloadTime)
这是一个条件判断语句,第一个条件是获取鼠标的左键是否按下,第二个条件就是冷却时间是否到达,如果两个条件满足了,就可以克隆一个子弹,发射出去。Input.GetButtonDown函数是用来获取参数里的虚拟按键是否按下,为什么要使用虚拟按键呢?因为unity的游戏代码是可以通用PC、手机等不同平台,在PC上有鼠标作为输入,在手机上就是触屏或者按键了。在这里参数名称为Fire1,这是在输入管理器里定义的。比如我这里缺省定义如下图:
在这里可以看到,左Ctrl键,或者鼠标左键都可以当作开火键,同时也可以是游戏手柄,这样更加通用化。
接着来看一下时间,Time.time:(只读)表示从游戏开发到现在的时间,会随着游戏的暂停而停止计算。当上一次发射子弹的时间加上冷却时间还大于当前时间时,就不能发射子弹出去。
在大括号内,就是克隆和发射代码了。首先使用GameObject类型定义一个对象go,保存克隆出来的子弹对象,而克隆的过程,就是使用函数Instantiate(),它是从预制件rocketPrefab里来复制出来,并且设置 go 的位置和方向。因此来查看一下函数Instantiate()的定义:
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
original是表示被克隆的对象,position是表示新对象所在的位置,rotation是表示新对象角度方向。有这些知识,可以理解下面这行代码:
GameObject go = (GameObject)Instantiate(rocketPrefab, rocketBarrel.position, Quaternion.LookRotation(rocketBarrel.forward));
rocketBarrel.position的位置,就是头所在的位置,因此子弹是从头部进行发射出去。rocketBarrel.forward的方向,就是双眼睛向前的方向。在这里有一个新函数Quaternion.LookRotation,它的定义如下:
Quaternion LookRotation(Vector3 forward, Vector3 upwards);
这个函数就是根据对局部坐标轴的描述, 构造对应的代表旋转程度的四元数。
forward:向前向量, 即z轴的朝向。但是仅仅有z轴的朝向是不够的, 因为对象还可能绕着z轴旋转, 所以需要upwards来约束。
upwards:向上向量, 注意, 此向量不需要是精确的y轴的朝向(即不需要与forward垂直), 但是, 此向量应该处于z轴、y轴平面上。
在这里Quaternion.LookRotation(rocketBarrel.forward),就是根据头的旋转角度来构造一个四元数,以便新创建的子弹是朝着眼睛的方向远离而去的。至于四元素有什么作用,以及怎么使用四元素,这个需要学习更多相关数学的知识。
也可以查看这个文章:
https://blog.csdn.net/caimouse/article/details/55505233
在创建完子弹之后,调用Physics.IgnoreCollision函数,这个函数是让两年物理碰撞器之间忽略碰撞,在这里第一个参数是获取脚本绑定的角色对象,后面go对象,也就是让角色与子弹之间不要计算碰撞关系。
Physics.IgnoreCollision(GetComponent<Collider>(), go.GetComponent<Collider>());
最后一行代码:
lastFireTime = Time.time;
这行就是记录子弹最后发射出去的时间,以便计算冷却时间。
到这里就把这个例子的代码解释清楚了,可见要开发一个简单的游戏,就需要深入领会向量、四元数、碰撞系统等知道。
Arduino入门基础
http://edu.csdn.net/course/detail/4931
Unity5.x游戏基础入门
http://edu.csdn.net/course/detail/4810
TensorFlow API攻略
http://edu.csdn.net/course/detail/4495以上所述就是小编给大家介绍的《游戏制作之路(16)子弹发射的几个函数》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 游戏制作之路(15)子弹的发射装置
- 子弹短信内部技术分享:Redis
- 游戏制作之路(14)模拟子弹的制作
- 游戏制作之路(17)模拟子弹的杀伤力
- 射击游戏里的子弹是如何飞行的
- 大胆猜想:子弹短信如何用增长黑客攻击微信
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
中国制造2025:产业互联网开启新工业革命
夏妍娜、赵胜 / 机械工业出版社 / 2016-2-22 / 49.00
过去20年,是中国消费互联网肆意生长的"黄金20年",诞生了诸如BAT等互联网巨头,而时至今日,风口正逐渐转向了产业互联网。互联网这一摧枯拉朽的飓风,在改造了消费服务业之后,正快速而坚定地横扫工业领域,拉开了产业互联网"关键30年"的大幕。 "中国制造2025"规划,恰是中国政府在新一轮产业革命浪潮中做出的积极举措,是在"新常态"和"供给侧改革"的背景下,强调制造业在中国经济中的基础作用,认......一起来看看 《中国制造2025:产业互联网开启新工业革命》 这本书的介绍吧!