当前位置:   article > 正文

Unity官方案例-Addressables-Sample-笔记(2)-Scene Loading(场景加载)_addressable 官方示例

addressable 官方示例

记录一下Addressables-Sample项目中的脚本和学习的笔记,主要是熟悉API及其使用方式.方便日后工作查询.

项目地址:

github: Addressables-Sample

Unity官方教程

Bilibili-Unity官方教程 Addressables【中文字幕】

Scene Loading

此示例演示了通过Addressables加载场景

场景说明

Scenes/Bootstrap

  • 这是开始的场景。从这个场景可以过渡到其他场景。
  • “Transition to Next Scene”将打开一个新场景(非累加),该场景将关闭当前场景。
  • “Add Object”将在场景中实例化一个可寻址的预置。此按钮的目的是显示这些项不需要对其调用ReleaseInstance。如果你使用 Profiler,你会看到他们会在场景关闭时得到清理。

Scenes/Foundation

  • 开始场景加载的就是这个场景。
  • “Load”按钮将额外打开其他场景。
  • “Unload”按钮将卸载已附加加载的场景。

Scenes/ItemScenes/

  • 额外的场景,没有脚本,从Foundation场景加载

脚本说明

Scripts/NextScene.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.UI;

public class NextScene : MonoBehaviour
{
	public string NextSceneAddress;

	Button m_NextButton;
	
	// Use this for initialization
	void Start ()
	{
		m_NextButton = GetComponent<Button>();
		m_NextButton.onClick.AddListener(OnButtonClick);
	}

	void OnButtonClick()
	{
		Addressables.LoadSceneAsync(NextSceneAddress);
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 打开一个新场景,关闭当前场景
  • public string NextSceneAddress; 这是场景的可寻址地址,是Addressables Groups里面的Addressable Name,而不是场景的场景名

Scripts/AddObject.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.UI;

public class AddObject : MonoBehaviour {

    public string addressToAdd;
    Button m_AddButton;

    void Start()
    {
        
        m_AddButton = GetComponent<Button>();
        m_AddButton.onClick.AddListener(OnButtonClick);
    }

    void OnButtonClick()
    {
        var randSpot = new Vector3(Random.Range(-5, 1), Random.Range(-10, 10), Random.Range(0, 100));
        Addressables.InstantiateAsync("ball", randSpot, Quaternion.identity);
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 加载一个预置

Scripts/AddScenes.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.ResourceManagement.ResourceProviders;
using UnityEngine.SceneManagement;
using UnityEngine.Serialization;
using UnityEngine.UI;

public class AddScenes : MonoBehaviour
{
	public string addressToAdd;
	Button m_AddButton;
	public TMPro.TMP_Text textArea;
	SceneInstance m_LoadedScene;
	bool m_ReadyToLoad = true;
	// Use this for initialization
	void Start () {
		
		m_AddButton = GetComponent<Button>();
		m_AddButton.onClick.AddListener(OnButtonClick);

		textArea.text = "Load " + addressToAdd;
	}

	void OnButtonClick()
	{
		if(string.IsNullOrEmpty(addressToAdd))
			Debug.LogError("Address To Add not set.");
		else
		{
			if (m_ReadyToLoad)
				Addressables.LoadSceneAsync(addressToAdd, LoadSceneMode.Additive).Completed += OnSceneLoaded;
			else
			{
				Addressables.UnloadSceneAsync(m_LoadedScene).Completed += OnSceneUnloaded;
			}
		}
	}

	void OnSceneUnloaded(AsyncOperationHandle<SceneInstance> obj)
	{
		if (obj.Status == AsyncOperationStatus.Succeeded)
		{
			textArea.text = "Reload " + addressToAdd;
			m_ReadyToLoad = true;
			m_LoadedScene = new SceneInstance();
		}
		else
		{
			Debug.LogError("Failed to unload scene at address: " + addressToAdd);
		}
	}

	void OnSceneLoaded(AsyncOperationHandle<SceneInstance> obj)
	{
		if (obj.Status == AsyncOperationStatus.Succeeded)
		{
			textArea.text = "Unload " + addressToAdd;
			m_LoadedScene = obj.Result;
			m_ReadyToLoad = false;
		}
		else
		{
			Debug.LogError("Failed to load scene at address: " + addressToAdd);
		}
	}

}
	

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 加载一个新场景,当前场景不关闭
  • 卸载场景
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/125187
推荐阅读
相关标签
  

闽ICP备14008679号