#c# #unity3d #photon
#c# #unity-игровой движок #photon
Вопрос:
Я импортировал проект из более ранней версии Unity, в настоящее время я использую 2018.3
У меня возникла одна проблема, кажется, я не могу ее игнорировать, комментируя ее, я получаю еще одну ошибку
Активы Скрипты Генералы LoadController.cs(48,22): ошибка CS0117: ‘SceneManager’ не содержит определения для ‘LoadSceneAsync’
У меня нет определенного класса с именем ‘SceneManager’, который переопределяет класс unity SceneManager
LoadController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public string nameSceneLoad = "MainGame";
void NextScene()
{
CancelInvoke();
SceneManager.LoadSceneAsync (nameSceneLoad, LoadSceneMode.Single);
}
Если я попытаюсь проигнорировать Это, у меня будет следующее
Активы Photon Unity NetworkingEditorPhotonNetworkPhotonViewHandler.cs(188,13): ошибка CS0433: тип ‘EditorSceneManager’ существует как в ‘Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’, так и в ‘UnityEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’.
Обработчик PhotonViewHandler.cs
//TODO: check if this can be internal protected (as source in editor AND as
dll)
public static void LoadAllScenesToFix()
{
string[] scenes = System.IO.Directory.GetFiles(".", "*.unity",
SearchOption.AllDirectories);
foreach (string scene in scenes)
{
EditorSceneManager.OpenScene(scene);
PhotonViewHandler.HierarchyChange();//NOTE: most likely on load also
triggers a hierarchy change
EditorSceneManager.SaveOpenScenes();
}
Debug.Log("Corrected scene views where needed.");
}
Я попытался перейти к определению F12, которое приводит к
#if !UNITY_MIN_5_3 amp;amp; ! UNITY_2017
// in Unity 5.3 and up, we have to use a SceneManager. This section re-
implements it for older Unity versions
#if UNITY_EDITOR
namespace UnityEditor.SceneManagement
{
/// <summary>Minimal implementation of the EditorSceneManager for older
Unity, up to v5.2.</summary>
public class EditorSceneManager
{
public static int loadedSceneCount
{
get { return
string.IsNullOrEmpty(UnityEditor.EditorApplication.currentScene) ? -1 : 1; }
}
public static void OpenScene(string name)
{
UnityEditor.EditorApplication.OpenScene(name);
}
public static void SaveOpenScenes()
{
UnityEditor.EditorApplication.SaveScene();
}
public static void SaveCurrentModifiedScenesIfUserWantsTo()
{
UnityEditor.EditorApplication.SaveCurrentSceneIfUserWantsTo();
}
}
}
#endif
namespace UnityEngine.SceneManagement
{
/// <summary>Minimal implementation of the SceneManager for older Unity, up
to v5.2.</summary>
public class SceneManager
{
public static void LoadScene(string name)
{
Application.LoadLevel(name);
}
public static void LoadScene(int buildIndex)
{
Application.LoadLevel(buildIndex);
}
}
}
#endif
Ответ №1:
Попробуйте указать, какой из них использовать, чтобы обойти дублирующуюся EditorSceneManager
ошибку, подобную этой:
using foo = UnityEditor.EditorSceneManager;
using boo = otherdll.Namespace;
Кстати, я думаю, эта ошибка вызвана тем, что у вас есть DLL в .NET 4.x и предыдущая DLL из .NET 3.5, поэтому вы, вероятно, можете просто удалить ту, которая предназначена для 3.5.
Комментарии:
1. Не могли бы вы уточнить, пожалуйста, где мне найти эту dll
2. Я пытаюсь перейти к определению F12
3. Не в среде unity, потому что на работе, но посмотрите на вкладку dependencies или references, не знаю названия вашей основной папки проекта в представлении solution Explorer (внутри vs), там есть значок, который выглядит как два или более соединенных серых прямоугольника (кстати, если вы все еще используете .net 3.5, это точно не ошибка)
4. Ваш комментарий, хотя, насколько я понимаю, каким-то образом в improting unity для вас реализован базовый Scenemanager, который не содержит def. для loadasync итак, у вас в основном есть два класса SceneManager, можете ли вы связать эти значения макросов?
5. Я изменил эту строку #if !UNITY_MIN_5_3 amp;amp; ! UNITY_2018 теперь ошибка исчезла, но, похоже, это связано с проблемой совместимости, которую мне придется понизить