自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药
自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药
我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的。仅为学习Unity之用。图片大部分是自己画的,少数是从网上搜来的。您可以到我的github页面(https://github.com/bitzhuwei/TankHero-2D)上得到工程源码。
本篇主要记录声音、场景切换、武器弹药等。
关于碰撞
先插一句。上一篇记录了Unity3D的碰撞相关的试验结论。但太过漫长,不实用,经过整理,我总结了如下几句。
Rigidbody组件的作用是:接收外力,从而使自身像物理中的刚体一样运动;对其它物体产生力。
若Rigidbody的IsKinimatic为true,则不再接收外力;但会继续对其它物体产生力。
Collider组件的作用是:划定一个空间范围(一个矩形、球形、网格等),Rigidbody组件会检测两个物体的Collider是否发生重合(Enter)持续(Stay)或退出(Exit),并激发双方的Collision事件。如果Collider的Is Trigger为true,则激发双方的Trigger事件。
总之,场景中不断运动的物体,需要Rigidbody,始终静止的物体,不需要Rigidbody。
声音
场景里要有1个Audio Listener才能听到声音。距离Audio Listener近的AudioSource发出的声音才能被听到。
背景音乐一般放到主摄像机上。
偶尔才发出的声音,比如捡到金币时发出"叮"地声响。直接用AudioSource.PlayClipAtPoint方法就可以。
void OnTriggerEnter2D(Collider2D other) { if (other.tag != Tags.hero) { return; }
AudioSource.PlayClipAtPoint(pickedAudioClip, this.transform.position, 0.2f); MonoBehaviour.Destroy(this.gameObject); } |
在持有AudioSource组件的对象上,可以看到一个喇叭,很好玩。这个坦克移动的时候,喇叭也跟着动了。
场景切换
场景切换时我希望一直保留某个对象,比如游戏控制器这种全局的东西。在脚本里用DontDestroyOnLoad就可以了。
void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(this.gameObject); } else { Destroy(this.gameObject); } } |
武器弹药
武器和子弹分别做成prefab,可以自由组合。在Inspector里也比较方便配置了。
总结
您可以到我的github页面(https://github.com/bitzhuwei/TankHero-2D)上得到工程源码。
请多多指教~
![]() |
微信扫码,自愿捐赠。天涯同道,共谱新篇。
微信捐赠不显示捐赠者个人信息,如需要,请注明联系方式。 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 本地部署 DeepSeek:小白也能轻松搞定!
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)