У меня есть следующий класс
namespace _Scripts.EnemyStuff
{
public class Enemy : MonoBehaviour, IDamagable
{
}
}
И затем, когда я пытаюсь использовать класс Enemy, мне нужно указать, что он исходит от _Scripts.EnemyStuff, даже если они имеют одного и того же родителя.
Следующий код не обнаруживает класс Enemy. Мне нужно указать EnemyStuff.Enemy, чтобы заставить его работать.
namespace _Scripts.Managers
{
public class EnemyManager : MonoBehaviour
{
public Enemy firstEnemyGO;
}
}
Почему это происходит? Кроме того, почему это не работает, если я использую
using Enemy = _Scripts.EnemyStuff.Enemy;
что вы подразумеваете под "даже если у них один и тот же родитель"?
добавление события using_Scripts.EnemyStuff не работает, по какой-то причине компилятор обнаруживает дубликат этого класса, даже если существует только 1
Я имею в виду, что даже если я помещу оба класа в одно и то же пространство имен _Scripts, он не определит его правильно.
У вас есть два класса с именем Enemy?
C# находит класс в родительском пространстве имен, но не в родственном пространстве имен. Вы разместили using Enemy = _Scripts.EnemyStuff.Enemy; в сценарии менеджеров?
Пожалуйста, предоставьте минимальный воспроизводимый пример. В настоящее время мы можем только догадываться, поскольку у нас нет всей необходимой информации.





В общем, вы всегда должны точно определить, какой тип вы имеете в виду. Я бы предпочел видеть это наоборот, и есть определенные случаи, когда С# уже «знает», поэтому вы можете опустить пространства имен или их части. Среди них, например.
using XYNamespace;, теперь вы можете опустить XYNamespace. при обращении к типам внутри него.См. также пространства имен
иметь одного и того же родителя
Они не очень! Ваша иерархия пространства имен выглядит так
_Scripts
|-- EnemyStuff
| |-- Enemy
|
|-- Managers
|-- EnemyManager
c# ищет тип рекурсивно вверх по родительскому пути (_Scripts.Managers.XY или _Scripts.XY), но не всплывает обратно вниз по всем возможным пространствам имен того же уровня.
Так что да, в этой структуре вам нужно будет указать пространство имен и использовать, например.
public EnemyStuff.Enemy firstEnemyGO;
EnemyStuff на самом деле можно найти в общем родительском пространстве имен _Scripts, поэтому вы можете опустить _Scripts.
Либо
using System;
using UnityEngine;
using Enemy = _Scripts.EnemyStuff.Enemy;
namespace _Scripts.Managers
{
public class EnemyManager : MonoBehaviour
{
public Enemy firstEnemyGO;
}
}
или
using System;
using UnityEngine;
namespace _Scripts.Managers
{
using Enemy = EnemyStuff.Enemy;
public class EnemyManager : MonoBehaviour
{
public Enemy firstEnemyGO;
}
}
или
using System;
using UnityEngine;
namespace _Scripts.Managers
{
public class EnemyManager : MonoBehaviour
{
public EnemyStuff.Enemy firstEnemyGO;
}
}
отлично работает для меня
просто добавьте
using _Scripts.EnemyStuff;в начало вашегоEnemeyManager-скрипта.