处理的问题
1、使用UGUI制作Slider时发生拉伸扭曲的情况。
2、音效播放声音过小(分为:使用SoundManager播放音效,使用AudioSource.PlayClipAtPoint()播放音效)。
3、雪球滚动的立体声效果。
解决方法
1、使用UGUI制作Slider时发生缩放扭曲的情况。
在制作Slider时,我们最初选择了新建Unity默认Slider然后直接更换图片的方式。
更换后由于大小与素材大小不符合,点击Set Native Size重新设置对应的UI大小,并调整位置。
调整一下Slider的Value值,测试一下功能。
这时便出现了问题,UI出现了拉伸,扭曲的情况。
发生拉伸,扭曲的部分有两个。一个是Slider Handle部分,一个是Fill Area部分。
而背景部分没有发生拉伸扭曲,应该是这两个部分的设置不符合Slider的要求。果然,Slider Handle和Fill Area的Anchor Preset被修改了。看来之前Set Native Size时Anchor Preset也被更改了。
按照更改后的Anchor Preset重新设置Slider Handle以及Fill Area的属性。再来测试一下。
发现还是不正确,Handle移动的距离明显和实际距离不符合。检查Slider的属性,发现使用的还是默认的配置。
将Width和Height改成现在的大小。
再测试一下,没有问题了。
2、音效播放声音过小(分为:使用SoundManager播放音效,使用AudioSource.PlayClipAtPoint()播放音效)。
SoundManager部分
我们在音效播放方案上,暂时使用了SoundManager插件。在使用SoundManager.PlaySFX()播放音效时,出现了音效声音过小的问题。最初以为是音效素材的问题,因为素材暂时采用搜集来的免费素材,音量大小可能不统一,所以出现了这个问题。但是今天在试听素材时发现,虽然音量大小不统一,但远不止于听不清楚,甚至听不见。最后发现在这个插件创建Audio Source时,默认指定的是3D音效,所以造成了音效音量过小的问题。
所以修改部分插件代码,当使用SoundManager.PlaySFX()播放音效却不指定具体播放位置时,将其改为2D音效。
c# //修改:如果没有指定音效播放位置,则视为2d音效 if (location == default(Vector3)) { aSource.spatialBlend = 0; }
测试一下,这次音效的音量正常了。
AudioSource.PlayClipAtPoint()部分
另外我们还在部分地方使用了AudioSource.PlayClipAtPoint()来播放音效,这种方法生成的音效也是3D的,而且因为这种方法没有返回AudioSource,没有找到方法直接将其改为2D,索性使用一个取巧的方法,将音效的播放位置设置成Audio Listener的位置,因为这个音效比较短,暂时没有出现什么问题。
c# //修改:直接播放音效声音太小,移动至Audio Listener位置播放 //AudioSource.PlayClipAtPoint(splashSound, vertex2); AudioSource.PlayClipAtPoint(splashSound, FindObjectOfType<AudioListener>().transform.position);
3、雪球滚动的立体声效果
希望实现的效果是,雪球滚动轰隆声随着靠近会越来越大。
这个处理得比较简单,因为我们是2D平台游戏,所以我们没有将Audio Listener放在Camera上,我们将Audio Listener放在了人物身上,并将雪球滚动的音效设置成3D。
这样雪球滚动的声音会随着离人越来越近而越来越大。
但这时又出现了一个问题。
因为只使用了一个音效,所以不管雪球滚得快还是慢,音效都没有变化,哪怕雪球在人物的阻碍下以极慢的速度滚动,轰隆声依然很大。
我的第一想法是改变声音的播放速度,当雪球滚动速度达到一定值时才正常播放音效,否则都是慢放,并随着速度越来越快,播放速度也越来越快。
但问题是我并没有找到类似于Play Speed这种接口。
通过咨询度娘BingGoogle我发现了一个叫做pitch的属性,通过改变这个值可以实现改变播放速度的效果。
根据直译pitch应该是 音高,音调 的意思,所以使用这种方法音效的音调会受到影响,好在影响不是很大,在没有更好的方法之前暂时先采取这种方法。
c# //先计算当前速度与标准速度的比值,根据比值调整pitch值 float vRate = Mathf.Abs(_rigidbody2D.angularVelocity) / _baseRotateSpeed; if (vRate >= 1) { //如果比值大于1则正常播放 _rollSFX.pitch = 1; } else { //如果比值小于1则根据比值改变pitch _rollSFX.pitch = vRate; }
写在最后
感谢大家看到这里。我是独立游戏工作室Gamma_Lambda的程序Relinke,上述内容是我们正在开发的平台解谜游戏《不洁者(Impure)》的开发日志。今后我们将持续更新开发日志,详细描述开发中遇到的问题及其解决方法,或分享一些有趣的开发经历。非常欢迎诸位在此与我们交流并指摘我们的错误。
干货很多啊
游戏还没录入?
@eastecho:是的,暂时还没有。
@Relinke:哈,您好像发布游戏和发布日志不是同一会员,所以没有能够成功帮助您挂接开发日志和游戏