c# - Unity 场景管理和 Android - 无法加载场景

标签 c# unity3d

我是 C#/Unity 的新手(要温柔)- 我正在尝试创建自己的脚本,将一个公共(public)变量添加到 Inspector,这样做允许我让一个脚本适用于多个游戏对象(或者我认为).

脚本非常简单。

它适用于 PC,但不适用于 Android。

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.EventSystems;

public class BtnLoadScene : MonoBehaviour {
    public Object SceneObj;
    private string SceneName;

    public void LoadLevel()
    {
        SceneName = SceneObj.name;
        Debug.Log (SceneName);
        SceneManager.LoadScene(SceneName);
    }
}

我将此脚本作为组件附加到驱动场景加载的所有按钮(在整个应用程序中)。同样,这里的值(value)是我可以将我的“场景”从 Assets 文件夹拖到检查器/组件中(因此我不必显式管理“整数”或“字符串”——这一切都将通过对象引用)。​​

例如: enter image description here

同样,这适用于 PC 更新:根据评论中的建议,我在独立播放器中尝试过,但失败了。这仅适用于 Unity 编辑器。当我为 Android 构建时(是的,它编译并且我可以安装 APK)它不起作用 - 第一个场景加载,按钮响应我的触摸,我看到它“按下”,但 ADB 抛出:

12-23 15:37:27.028 14816 14847 I Unity   : NullReferenceException: Object reference not set to an instance of an object
12-23 15:37:27.028 14816 14847 I Unity   :   at BtnLoadScene.LoadLevel () [0x00000] in <filename unknown>:0
12-23 15:37:27.028 14816 14847 I Unity   :   at UnityEngine.Events.InvokableCall.Invoke (System.Object[] args) [0x00000] in <filename unknown>:0
12-23 15:37:27.028 14816 14847 I Unity   :   at UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0
12-23 15:37:27.028 14816 14847 I Unity   :   at UnityEngine.Events.UnityEventBase.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0
12-23 15:37:27.028 14816 14847 I Unity   :   at UnityEngine.Events.UnityEvent.Invoke () [0x00000] in <filename unknown>:0
12-23 15:37:27.028 14816 14847 I Unity   :   at UnityEngine.UI.Button.Press () [0x00000] in <filename unknown>:0
12-23 15:37:27.028 14816 14847 I Unity   :   at UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) [0x00000] in <filename unknown>:0
12-23 15:37:27.028 14816 14847 I Unity   :   at UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in <filename unknown>:0
12-23 15:37:27.028 14816 14847 I Unity   :   at UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target
12-23 15:37:27.036 14816 14847 I Unity   : NullReferenceException: Object reference not set to an instance of an object
12-23 15:37:27.036 14816 14847 I Unity   :   at BtnLoadScene.LoadLevel () [0x00000] in <filename unknown>:0
12-23 15:37:27.036 14816 14847 I Unity   :   at UnityEngine.Events.InvokableCall.Invoke (System.Object[] args) [0x00000] in <filename unknown>:0
12-23 15:37:27.036 14816 14847 I Unity   :   at UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0
12-23 15:37:27.036 14816 14847 I Unity   :   at UnityEngine.Events.UnityEventBase.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0
12-23 15:37:27.036 14816 14847 I Unity   :   at UnityEngine.Events.UnityEvent`1[T0].Invoke (.T0 arg0) [0x00000] in <filename unknown>:0
12-23 15:37:27.036 14816 14847 I Unity   :   at UnityEngine.EventSystems.EventTrigger.Execute (EventTriggerType id, UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in <filename unknown>:0
12-23 15:37:27.036 14816 14847 I Unity   :   at UnityEngine.EventSystems.EventTrigger.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) [0x00000] in <filename unknown>:0
12-23 15:37:27.036 14816 14847 I Unity   :   at UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in <filename

如果我输入一个硬编码值(字符串或场景整数),它在 Android 和 PC 上运行良好。但是,出于某种我看不到的原因,当我为 Android 构建时,我在 Inspector 中引用的 Scene 对象似乎没有像我想的那样捕获字符串名称并将其传递给 LoadScene() .

任何人都可以就我做错了什么提出建议吗?这是不可能的还是愚蠢的想法?

提前谢谢你。

最佳答案

恐怕 UnityEngine.SceneAsset 只能在编辑器中使用,并且在任何构建中最终都会为 null。 然而,Unity3D 只需要 BuildSettings 列表中的字符串或索引,所以它很简单:只需在检查器中传递场景名称。无论哪种方式,它将在您的整个开发过程中保持不变,并且如果您更改场景名称,其行为将与您将实际的 SceneAsset 对象放在那里一样(在这两种情况下重命名都会失败)。

关于c# - Unity 场景管理和 Android - 无法加载场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34443589/

相关文章:

c# - 从后台工作人员登录MyLogger时发生跨线程InvalidOperationException

unity3d - 在 Canvas Scaler 中开发 2D 游戏

c# - 每次启动我的应用程序时都会弹出 GooglePlayGames 加载 Logo

c# - 如何在负索引处启动数组 C#(UNITY)

c# - 启动/更新变量范围

c# - 如何在 C# 中动态转换泛型列表?

c# - SonarQube 未更新报告 - "Line 5 is out of range for file Program.cs. File has 4 lines"

c# - 通用 C# 类 : Set "Generic" Property

c# - Lazy<T> 的缺点?

java - 如何将 Unity 集成到 Android Activity 中