【发布时间】:2020-06-06 00:04:54
【问题描述】:
我试图了解如何为 Unity3D 实现 DontDestroyOnLoad,我偶然发现了这篇文章:https://honkbarkstudios.com/developer-blog/dontdestroyonload-tutorial/
本文由 Christian Engvall 撰写,提供以下代码作为教程:
using UnityEngine;
using System.Collections;
public class MusicController : MonoBehaviour {
public static MusicController Instance;
void Awake()
{
this.InstantiateController();
}
private void InstantiateController() {
if(Instance == null)
{
Instance = this;
DontDestroyOnLoad(this);
}
else if(this != Instance) {
Destroy(this.gameObject);
}
}
}
更多信息:Engvall 创建了一个名为 MusicController 的游戏对象,并为其附加了一个音频源。他还附加了一个 C# 脚本,也称为 MusicController。然后该脚本包含一个类型为 MusicController 的公共静态变量,他将游戏对象拖入其中。代码的目标是让音频在场景中不间断地播放,即在新场景加载时不要破坏包含音频源的游戏对象。
我很困惑“this”是指 gameObject 还是 MusicController 类。当我阅读this.InstantiateController(); 时,似乎“this”必须是 MusicController 公共类。但是,在下面
if(Instance == null)
{
Instance = this;
DontDestroyOnLoad(this);
}
else if(this != Instance) {
Destroy(this.gameObject);
}
似乎“this”必须引用链接到名为 Instance 的 MusicController 公共静态变量的游戏对象。
所以我很困惑。它是哪一个?还是完全是另外一回事?
我尝试阅读 6 年前的这篇堆栈溢出帖子,但不幸的是我仍然感到困惑。 The 'this' keyword in Unity3D scripts (c# script, JavaScript)
提前感谢您的帮助。
【问题讨论】:
标签: c# unity3d this persistent gameobject