因此,在下面的這個腳本中,我使用了SceneAssetUnity 中 C# 腳本中的參考,并且在從編輯器播放時效果很好。
但是,當我嘗試構建我的游戲時,它不起作用,因為我從控制臺收到錯誤,說
找不到型別或命名空間名稱“SceneAsset””。
這是一個錯誤還是我做錯了什么?
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ProvincePinScript : MonoBehaviour
{
public int ActiveWorldProvinceID;
public SceneAsset[] WorldProvinces;
// We can set up a pin that can take bananaman to certain provinces or countries! :)
public void Begin()
{
Invoke("Travel", 4f);
}
public void Travel()
{
SceneManager.LoadScene(WorldProvinces[ActiveWorldProvinceID].name);
}
}
uj5u.com熱心網友回復:
為了參考SceneAsset您添加了對 UnityEditor 的使用參考。這將在編輯器中正常作業,但是一旦您構建了最終游戲,所有對 UnityEditor 的參考都將被洗掉。
您通常會將打算在編輯器中運行的腳本添加到專案中名為Editor. 構建時,Unity 不會在該檔案夾中包含任何內容。但是您已經繞過了該機制,并且留下了一個不包含任何內容的 UnityEditor 存根。
此處的檔案更詳細地介紹了 SceneAsset。
通常,您可以通過其構建索引或場景名稱來指向一個場景,使用SceneManager.LoadSceneAsync,作為示例,在此處進行詳細說明。
這是我模擬的一個黑客示例(書面,未經測驗,但應該可以完成作業)。這應該允許您UnityEditor.SceneAsset在 Inspector 中使用,并將場景名稱序列化為List<string>您可以在運行時腳本中使用的 a。如前所述,這只是我為練習而模擬的一個技巧。我沒有斷言這確實是一個好主意,但理論上它允許您將場景資產物件拖放到 Inspector 中,而不是手動將場景名稱寫成字串。
#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
public class ProvincePinScript : MonoBehaviour
#if UNITY_EDITOR
, ISerializationCallbackReceiver
#endif
{
public int ActiveWorldProvinceID;
#if UNITY_EDITOR
public SceneAsset[] WorldProvinces;
#endif
[HideInInspector, SerializeField]
private List<string> _worldProvinces;
// We can set up a pin that can take bananaman to certain provinces or countries! :)
public void Begin ( )
{
Invoke ( "Travel", 4f );
}
public void Travel ( )
{
SceneManager.LoadScene ( _worldProvinces [ ActiveWorldProvinceID ] );
}
#if UNITY_EDITOR
public void OnAfterDeserialize ( ) => FillScenes ( );
public void OnBeforeSerialize ( ) => FillScenes ( );
public void OnValidate ( ) => FillScenes ( );
private void FillScenes ( )
{
if ( _worldProvinces is null )
_worldProvinces = new ( );
_worldProvinces.Clear ( );
foreach ( var s in WorldProvinces )
_worldProvinces.Add ( s.name );
}
#endif
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/528949.html
標籤:C#unity3d
