Unity+C#如何开发投弹手游戏?教你Unity+C#开发投弹手游戏的操作。
首先,请下载我为这个游戏创建的初始示例项目,然后将它放在您指定的位置。
然后,使用Unity3D打开这个项目,注意在Assets文件夹下有许多子文件夹。
以下是每个文件夹的主要功能:
AnimationControllers:存储游戏控制器部分,包括逻辑部分。
材质:包含构建每个关卡场景所需的块材质。
模型:存储玩家、关卡和炸弹模型,以及它们的相关资料。
音乐:存储游戏的声音文件。
物理材料(PhysicsMaterials):存储玩家的物理材料数据,是用来实现特定物理属性的一些特殊类型的材料。在本教程中,它是用来让玩家轻松跨越关卡而没有摩擦的。
预设:包含炸弹和爆炸的预制数据。
场景:对应游戏场景的数据。
Scripts:包含游戏的启动脚本,其中会添加很多注释,帮助读者阅读源代码。
音效:包含与炸弹和爆炸效果相关的音效文件。
纹理:包含两个玩家的纹理数据。
扔炸弹
如果您还没有打开游戏项目,请快速打开并尝试运行此程序。如果没有其他问题,您将观察如图所示的情况:
你会注意到游戏中的两个玩家可以通过键盘上的WASD四字键或四个箭头键来驱动他们沿着游戏地图移动。
通常,当按下空格键时,红色玩家会在脚下放置一个炸弹,另一个玩家也可以做同样的事情——只需按下Enter键。
但是,目前我们还没有实现这个功能。为此,您需要先编写放置炸弹的代码。现在,请使用您最喜欢的代码编辑器打开脚本文件Player.cs
这个脚本负责处理玩家的所有动作和动画逻辑,还包含一个方法dropbember,在关联GameObject)bombPrefab时用于检测目的。
privateviddropbumbel(){ if(Bomb Prefab){//CheckIFBomb PrefabisassignedFirst } } 1 . 2 . 3 . 4。为了实现炸弹落在玩家下方的效果,在if语句中添加以下代码:
Instantiate(bombPrefab,myTransform.position,bombPrefab . transform . rotation);1.上面的代码会在玩家脚下生成一个炸弹(随着玩家移动路径的变化,会生成一串炸弹)。现在,运行游戏项目,您将观察到如下图所示的效果:
目前效果不错!
但是,还有一个小问题:炸弹是怎么扔的?如果你可以把炸弹放在任何地方,当你需要计算爆炸应该发生的位置时,就会带来一些问题。
接下来,本教程将向您展示如何实现爆炸的所有细节。
炸弹位置
接下来的任务就是保证炸弹在扔掉的时候能够贴在相应的位置上,让炸弹能够很好的对准地板上的格子。因为在我们的设计中网格上每个块的大小是1×1,所以做这个改变是相当容易的。
打开Player.cs文件并编辑Instantiate()函数,如下所示:
实例化(bombPrefab,newVector3(Mathf。round point(my transform . position . x),bombprefab . transform . position . y,Mathf。round point(my transform . position . z))、bombprefab . transform . rotation);1.2.3.注意函数Mathf。这里的RoundToInt使用了玩家位置的两个参数值X和Z,每个浮点型值都转换成了整数值,可以达到炸弹与地板上的网格很好对齐的效果:
现在,您可以再次启动项目来运行它,并且您将观察到当炸弹被扔下时,它们正好与网格对齐:
虽然在地图上扔炸弹很有趣,但是你知道真正有趣的是怎么爆炸!为此,我们来增加一些功能。
制造爆炸效果
首先,我们需要创建一个新脚本文件:
(1)从“项目”视图中选择“脚本”文件夹;
(2)按下创建按钮;
(3)选择“c #脚本”;
(4)将脚本文件命名为炸弹即可。
现在,将Bomb.cs脚本与预制炸弹相关联:
(1)选择GameObjectBomb在预设文件夹中;
(2)单击按钮“添加组件”;
(3)在搜索框中输入“炸弹”;
(4)选择脚本Bomb.cs你刚刚创造的。
(5)打开这个脚本文件,然后在其Start()方法中输入以下代码:
Invoke("Explode ",3f);1.这个方法有两个参数,第一个是要调用的方法的名称,第二个是调用这个方法时要延迟的小时数。在这种情况下,我们希望达到炸弹在3秒内爆炸的效果。我们将在后面添加这个分解方法的细节。
现在,只需在Update()方法下添加该方法的占位符形式(当前为空):
VoidExplode(){}1.2。在生成任何GameObjectExplosion之前,您需要创建一个male * * *类型的GameObjet对象来分配预制的披露。在Start()方法上方定义以下代码:
publigcgameobjectexplosionprefab;1.保存这个文件,然后从Prefabs文件夹中选择预制炸弹,然后将预制爆炸拖到“ExplosionPrefab”选项后面的空白处。
完成后,返回编辑器。现在开始编写更有趣的代码。
在Explode()方法中,添加以下代码行:
Instantiate(explosionPrefab,transform.position,四元数. identity);//1 get component & lt;MeshRenderer & gt().enabled = false//2转换。find child(" Collider ")game object . set active(false);//3Destroy(gameObject,. 3f);//41.2.3.4.以上代码实现了以下功能:
1.在炸弹位置引发爆炸;
2.禁用meshrender使炸弹隐形;
3.禁用碰撞器,从而允许玩家在爆炸中移动和行走;
4.0.3秒后拆除炸弹;这确保了在游戏对象被删除之前,所有的爆炸都会被触发。
现在,保存脚本Bomb.cs,返回编辑器,再次尝试玩游戏。投一些炸弹,观察它们爆炸时的良好效果。参考下图。
设置爆炸声音效果
为了制造理想的爆炸效果,你需要制造一个巧合。
“补充”协程本质上是一个允许您暂停执行并将控制返回给Unity3D的函数。在未来的某个时刻,函数将从它最后离开的地方继续执行。
人们经常混淆协程和多线程。实际上,它们是不同的:进程运行在同一个线程中,可以在某个中间时间点恢复执行。要了解更多关于协程及其定义的信息,请参考相关的Unity文档(