自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药

时间:2020-12-21 04:40:13

自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药

我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的。仅为学习Unity之用。图片大部分是自己画的,少数是从网上搜来的。您可以到我的github页面(https://github.com/bitzhuwei/TankHero-2D)上得到工程源码。

自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药

自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药

本篇主要记录声音、场景切换、武器弹药等。

关于碰撞

先插一句。上一篇记录了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发出的声音才能被听到。

背景音乐一般放到主摄像机上。

自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药

偶尔才发出的声音,比如捡到金币时发出"叮"地声响。直接用AudioSource.PlayClipAtPoint方法就可以。

自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药

void OnTriggerEnter2D(Collider2D other)

{

if (other.tag != Tags.hero) { return; }

AudioSource.PlayClipAtPoint(pickedAudioClip, this.transform.position, 0.2f);

MonoBehaviour.Destroy(this.gameObject);

}

在持有AudioSource组件的对象上,可以看到一个喇叭,很好玩。这个坦克移动的时候,喇叭也跟着动了。

自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药

场景切换

场景切换时我希望一直保留某个对象,比如游戏控制器这种全局的东西。在脚本里用DontDestroyOnLoad就可以了。

void Awake()

{

if (instance == null)

{

instance = this;

DontDestroyOnLoad(this.gameObject);

}

else

{

Destroy(this.gameObject);

}

}

武器弹药

武器和子弹分别做成prefab,可以*组合。在Inspector里也比较方便配置了。

总结

您可以到我的github页面(https://github.com/bitzhuwei/TankHero-2D)上得到工程源码。

请多多指教~