教程基于 , 这个例子感觉还是比较经典的, 网上转载的也比较多. 刚好最近也在学习U3D, 做的过程中自己又修改了一些地方, 写篇文和大家一起分享下, 同时也加深记忆. 有什么纰漏的地方还请大家多包涵.
新建工程,在Project面板创建文件夹, 是为了更好的规划管理资源文件.
接着在Hierarchy面板上创建多个空对象(这样的结构也是清晰了整个游戏的层次, 对象之间的关系一目了然), 这些空对象的Position保持(0,0,0)即可. 保存场景到Scenes文件夹中, 名称为Stage1.
在弹出的Sprite Editor窗口中, 进行绘制每个平台岛屿的包围矩形, 以便将纹理分隔成更小的部分. 然后分别命名为platform1和platform2.
修改下游戏对象的Z坐标, 如下所示:
0 |
此时, 点击Scene面板上的2D到3D视图切换, 可以清除的看到层次:
但是已经比图片小多了.
但是我更愿意去使用Polygon Collider 2D来达到更精致的效果, 这里只是个例子, 大家可以自由选择.
接着, 再为主角对象添加Rigidbody 2D刚体组件, 现在运行可以看到如下结果:
可以看到主角往下落了, 这是因为刚体带有重力, 但在这个游戏中我们用不到重力, 将Gravity Scale设置为0即可. 另外, 不想因为物理而引起的主角旋转, 则将Fixed Angles勾选上.
开始准备让主角移动. 在Scripts文件夹中, 创建一个C#脚本, 名称为PlayerScript, 实现让方向键移动主角, 代码如下:
这里以改变刚体的速率来达到主角移动的效果, 而不是通过直接改变transform.Translate, 因为那样的话, 可能会不产生碰撞. 另外, 这里有人可能会疑问为什么实现移动的代码要写在FixedUpdate而不是Update中, 请看Update和FixedUpdate的区别: .
现在将此脚本附加到主角对象上, 点击运行, 方向键来控制移动.
将此脚本附加到章鱼对象上, 现在运行吗可以看到章鱼往前移动, 如图:
此时如果主角和章鱼发生碰撞, 会互相阻塞对方的移动.
1),并且勾选"IsTrigger"属性。勾选"IsTrigger"属性表示该碰撞体用于触发事件,并将被物理引擎所忽略。意味着,子弹将穿过触碰到的对象,而不会阻碍对象的移动,触碰的时候将会引发"OnTriggerEnter2D"事件。创建一个脚本,命名为"ShotScript",代码如下:
将此脚本附加到子弹对象上,然后将"MoveScript"脚本也附加到子弹对象上以便可以移动。保存此对象为预制。接着,让碰撞产生伤害效果。创建一个脚本,命名为"HealthScript",代码如下:
将此脚本附加到Poulpi预制体上。现在运行,让子弹和章鱼碰撞,可以看到如下结果:
如果章鱼的生命值大于子弹的伤害值,那么章鱼就不会被消灭,可以试着通过改变章鱼对象的"HealthScript"的hp值。
接着,我们来准备射击。创建一个脚本,命名为"WeaponScript",代码如下:
当收到射击的按钮状态,调用Attack(false)方法。现在运行,可以看到如下结果:
Prefab"属性,创建一个脚本,命名为"EnemyScript",用来简单地每一帧进行自动射击,代码如下:
将此脚本附加到章鱼对象上,现在运行,可以看到如下结果:
可以看到章鱼向右射击了子弹,这是因为代码就是让它那么做的。实际上,应该做到可以朝向任何方向射击子弹。修改"WeaponScript"中的Attack方法,代码为如下:
可以适当调整子弹的移动速度,它应该快于章鱼的移动速度。现在运行,如下图所示:
目前,当主角和章鱼碰撞时,仅仅只是阻碍对方的移动而已,在这里改成互相受到伤害。打开"PlayerScript"文件,添加如下代码:
为了达到这种视差卷轴的效果,可以让背景层以不同的速度进行移动,越远的层,移动地越慢。如果操作得当,这可以造成深度的错觉,这将很酷,又是可以容易做到的效果。在这里存在两个滚动:
一个循环的背景将在水平滚动的时候,一遍又一遍的重复进行显示。现有的层如下:
接下来,实现无限背景。当左侧的背景对象远离了摄像机的左边缘,那么就将它移到右侧去,一直这样无限循环,如下图所示:
要做到检查的对象渲染器是否在摄像机的可见范围内,需要一个类扩展。创建一个C#文件,命名为"RendererExtensions.cs",代码如下:
接下来,可以开始实现不带背景循环的滚动。创建一个脚本,命名为"ScrollingScript",代码如下:
在Start方法里,使用了LINQ将它们按X轴进行排序。
将这个脚本附加到以下对象上,并且设置好其属性值,如下:
现在添加更多的元素到场景上:
接下来,修改敌人脚本,让敌人静止不动,且无敌,直到摄像机看到它们。另外,当它们移出屏幕时,则立刻移除它们。修改"EnemyScript"脚本,代码为如下:
在游戏过程中,可以发现主角并不是限制在摄像机区域内的,可以随意离开摄像机,现在来修复这个问题。打开"PlayerScript"脚本,在Update方法里面添加如下代码:
#region 确保没有超出摄像机边界
Blended",接着更改一些属性,如下所示:
其中Color Over Lifetime要设置成在结束时,有个淡出的效果,如下图所示:
当调整完成后,取消勾选"Looping",现在粒子效果为如下:
保存成预制,命名为"SmokeEffect",放在"Prefabs/Particles"文件夹下。现在创建另一个粒子,火焰效果,使用默认材质即可。其他设置如下:
其中Color Over Lifetime要设置成有一个***到橙色的渐变,最后淡出,如下图所示:
这里创建了一个单例,可以让任何地方都可以产生烟和火焰的粒子。将这个脚本附加到"Scripts"对象,设置其属性"Smoke Effect"和"Fire Effect"为对应的预制体。现在是时候调用这个脚本了,打开"HealthScript"脚本文件,在OnTriggerEnter方法里面,更新成如下代码:
现在运行,射击敌人,可以看到如下效果:
现在来添加一些声音。将声音资源放入"Sounds"文件夹,取消勾选每一个声音的"3D sound"属性,因为这是2D游戏。准备播放背景音乐,创建一个游戏对象,命名为"Music",其Position为(0, 0, 0),将背景音乐拖到这个对象上,然后勾选"Mute"属性。因为音效总是在一定的时机进行播放,所以创建一个脚本文件,命名为"SoundEffectsHelper",代码如下:
这里我做了一个非空判断, 因为按照原例中的程序, 当章鱼死亡在摄像机边界时, 会导致Script对象被销毁! 从而引发程序异常. 我没有找到被销毁的准确原因, 所以暂时折中一下, 加了个判断, 以确保程序能照常运行. 如果哪位大神有知道原因的话也欢迎告诉我来更新此文.
将此脚本附加到"Scripts"对象上,然后设置其属性值,如下图所示:
接着,在"HealthScript"脚本文件里,播放粒子效果后面,添加代码:
现在运行,就可以听到声音了。
1)。添加一个空对象,命名为"Scripts",用来加载脚本。现在为这个启动画面,添加一个开始按钮。创建一个脚本文件,命名为"MenuScript",代码如下:
将此脚本附加到"Scripts"对象上。现在运行,可以看到如下效果:
但是,点击按钮会崩溃,因为没有将Stage1场景添加进来。打开"File"→"Build Settings",将场景"Menu"和"Stage1"拖动到上面的"Scenes In Build"里面。再次运行,就可以看到按钮正常切换场景了。当主角被摧毁时,需要可以重新开始游戏。创建一个脚本文件,命名为"GameOverScript",代码如下:
在主角死亡的时候,调用这个脚本。打开"PlayerScript"文件,添加如下代码:
现在运行,当死亡时,就会出现按钮,如下图所示:
9.代码创建平台岛屿和敌人
现在, 一个简单的横版射击小游戏已经有雏形了, 然后手动创建有限的岛屿和敌人毕竟有耗尽的时候. 这个时候我们可以在代码中动态的去创建敌人和岛屿, 这样只要玩家还存活, 就会一直有敌人出现, 有点无尽版的意思.
接着继续创建一个脚本文件,命名为"MakeEnemyScript",代码如下:
现在再次运行, 就会看到系统自动创建的章鱼敌人和漂浮岛屿了!
到这里, 整个游戏就完成了, 推荐大家可以去页首找原文链接去看看, 老外的原文解说的更详细, 我也是在原文的基础上自己再次整理.
最后附上程序源码, 文中有纰漏或看不太明白的地方大家可以对照着源码一起看, 欢迎留言指教.
声之寄托(KOEWOTAYORINI)总共有4个结局。其中达成难度较高的是信赖度极低的BAD END与信赖度极高的完美结局,下面就来分享一下声之寄托全结局达成攻略。
声之寄托全结局达成攻略
当故事在第7章结束的情况
此结局可以通过重复选择通话对象不喜欢的言论达成。由于对话会一直重复进行直到你选择正确的***为止,你可以通过持续在此场景选择不正确的***来降低信赖度。
下降――拒接,直到选择接听无限循环
下降――否,直到选择是无限循环
但我说的是真的 请你救救我
上升――我知道了,总之你先冷静一下
下降――我很忙恕我拒绝,直到正确选择无限循环
下降――加油! 直到正确选择无限循环
在完成第五章之后,你会被通话对象询问是否进行“猜谜游戏”。这个选项会决定游戏是否会在第7章结束。如果你的目标是【BAD END】请拒绝此提议。
HAPPY END是只有在信赖度极高 的场合才能到达的结局。游戏中并没有透露如何提高信赖度,但是官方博客上有发布一些提示。
完成第五章之后,你将进行猜谜。
如果你没有回复这个猜谜,你将无法进入第八章以及之后的阶段。如果你的目标是HAPPY END,请回答正确***【声音】。
在章节之间的对话中,给出可以得到对方信任的回答。
用尽可能短的路线通关。随着游戏时间的推移,信赖度会下降。
从第九章开始,游戏将不再有选项,取而代之的是出现Game Over。由于在Game Over时信赖度会下降,所以尽量避免Game Over。但是,有可能会出现意外情况,所以建议玩家在第九章开始的时点保存游戏。
在第十二章逃离杀人魔时,你可以通过尽可能保留剩余次数来提高信赖度。最速脱离方式将在后文解释。
本作根据选择和信赖度分支剧情和结局。选择分支点①第五章后是否接受猜谜游戏,选择分支点②第七章后是否救猫。场景分支由以下流程图表示。