Unity2D教程:事件顺序、音乐播放、载入资源、游戏暂停

    技术2024-03-22  141

    关注专栏,持续更新哦

    教程总目录


    全是自己总结的干货

    事件顺序

    当一个GameObject首次Active=true后,会先触发Awake函数,再触发Start函数,之后每帧触发Update函数。

    不管是在游戏内通过SetActive(true)来激活,还是本身已经激活,触发的顺序都为:Awake,OnEnable,Start。之后每次SetActive(false)触发OnDisable,每次SetActive(true)触发OnEnable。

    音乐播放

    游戏内部音乐从时间长度分为两种:短音乐和长音乐。

    短音乐通过获取AudioSource组件,再通过该组件的PlayOneShot(AudioClip)来播放(PlayOneShot没有现成的方法去暂停)。长音乐则考虑到暂停等因素,设置AudioSource的clip为指定AudioClip后,通过Play()方法播放。之后可以通过Pause暂停,UnPause继续。Stop()之后相当于关闭了,再次播放需要再次调用Play(),且会重新开始。通过isPlaying来获取是否在播放。想要不暂停音乐进度达到静音的效果,只需要设置mute为true(静音)另外可以通过设置volume来改变音量(0到1) // 参考 // 播放相关 static AudioSource audioSource; static AudioSource audioOneShot; static public void PlayAudioOneShot(AudioClip audioClip) { audioOneShot.PlayOneShot(audioClip); } static public void PlayAudio(AudioClip audioClip) { audioSource.clip = audioClip; audioSource.Play(); } // 设置音量 static public void SetAudioVolume(float volume) { audioSource.volume = volume; } // 设置静音 static public void SetAudioMute(bool ifMute) { audioSource.mute = ifMute; }

    载入资源

    很多时候我们不想通过public再一个个拖进script组件的方式得到资源对应的对象。这个时候就需要载入资源了。

    在Assets下面创建一个叫Resources的文件夹,Build的时候会将Resources下的资源自动包进去。

    可以在代码内部通过(AudioClip)Resources.Load("Audio/XXX")导入AudioClip对象 通过Resources.Load<Sprite>("Image/Button");导入Sprite对象。

    导入其他资源的时候可以自己试试类似的方法。

    游戏暂停

    一般是通过Time.timeScale来达到效果。设置为0就是暂停,设置为1就是正常。

    其实可以看成是改变Time.deltaTime来到达效果。因为游戏内部物体的运动都是基于Time.deltaTime的,另外倒计时也可以通过timer+=Time.deltaTime实现。

    但是不基于Time.deltaTime的是没办法通过这个停止的,例如Update函数还是会每帧都进行。

    下面给一个可以暂停音乐的暂停方法:

    // 参考 public void TimeManager(float scale) { Time.timeScale = scale; if (scale == 0) { if(audioSource.isPlaying) audioSource.Pause(); } else { if (!audioSource.isPlaying) audioSource.UnPause(); } }
    Processed: 0.014, SQL: 9