使用 Addressable
如下图所示安装 Addressables
打开 Addressables
创建 Addressables Settings
创建完毕之后,就能在 Assets 目录下找到配置好的文件
我们把默认的 Group Name 改成 Scenes
然后选择场景,勾选 Addressable
把场景变成 Addressable 之后,在 Build Settings 里面就不需要添加场景了
接着把所有场景都加进来,可以右键简化名字
敌人制作预制体并 Addressable
在 Assets 文件夹下面创建一个子文件夹,叫做 Prefabs,然后把野猪、蜗牛、蜜蜂都拖拽进去
创建 ScriptableObject
我们要告诉 SceneLoadManager,最开始要加载什么场景。Teleport 也要告诉 SceneLoadManager,发生传送的时候要加载什么场景。所以我们创建 SceneLoadEventSO。要加载什么场景还比较复杂,需要区分场景的类型,已经场景的引用,所以用到了 GameSceneSO
创建 Data SO
SceneLoadManager 加载第一个场景以及接收 SceneLoadEventSO
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.SceneManagement;
public class SceneLoader : MonoBehaviour
{
[Header("事件监听")]
public SceneLoadEventSO loadEventSO;
public GameSceneSO firstLoadScene;
[SerializeField]
private GameSceneSO currentLoadScene;
private GameSceneSO locationToLoad;
private Vector3 posToGo;
private bool fadeScreen;
public float fadeDuration;
private void Awake()
{
// Addressables.LoadSceneAsync(firstLoadScene.sceneReference, LoadSceneMode.Additive);
currentLoadScene = firstLoadScene;
currentLoadScene.sceneReference.LoadSceneAsync(LoadSceneMode.Additive);
}
private void OnEnable()
{
loadEventSO.loadRequestEvent += onl oadRequestEvent;
}
private void OnDisable()
{
loadEventSO.loadRequestEvent -= onl oadRequestEvent;
}
private void onl oadRequestEvent(GameSceneSO locationToLoad, Vector3 posToGo, bool fadeScreen)
{
this.locationToLoad = locationToLoad;
this.posToGo = posToGo;
this.fadeScreen = fadeScreen;
StartCoroutine(UnLoadPreviousScene());
}
private IEnumerator UnLoadPreviousScene()
{
if (fadeScreen)
{
// todo 实现渐入渐出
}
yield return new WaitForSeconds(fadeDuration);
if (currentLoadScene != null)
{
yield return currentLoadScene.sceneReference.UnLoadScene();
}
LoadNewScene();
}
private void LoadNewScene()
{
locationToLoad.sceneReference.LoadSceneAsync(LoadSceneMode.Additive, true);
}
}
在 Awake 的时候,加载了第一个场景 First Load Scene
在 Enable 的时候,监听 onl oadRequestEvent 事件,记录要切换的场景、位置、是否淡入淡出,然后开启协程卸载旧场景和加载新场景
TeleportPoint 切换场景的时候发送 SceneLoadEventSO
项目相关代码
代码仓库:https://gitee.com/nbda1121440/2DAdventure.git
标签:场景,管理,void,private,fadeScreen,切换,using,加载 From: https://www.cnblogs.com/hellozjf/p/18040252