Unity Как получить трансформацию из Hashset <EnemyScript> - PullRequest
0 голосов
/ 19 июня 2020

Я создал Hashset, к которому я добавляю своих врагов. В скрипте Enemy в OnEnable и Disable я добавляю и удаляю из Hashset. Hashset - это publi c stati c, поэтому я могу получить доступ к его количеству, просто набрав Debug.Log(Enemy.enemyTargets.Count);, чтобы увидеть увеличение и уменьшение числа.

Как мне получить доступ к преобразованию Hashset, я знаю, что hashset не имеет определенного c порядка, и это нормально, но мне просто нужно преобразование любого объекта внутри Hashset.

Внутри Скрипт Enemy.cs

public class Enemy: MonoBehaviour {
    public static readonly HashSet<Enemy> enemyTargets = new HashSet<Enemy>();

    private Transform _transform;
    public new Transform transform => _transform = _transform ? _transform : base.transform;

    private void OnEnable()
    {
        enemyTargets .Add(this);
    }

    private void OnDisable()
    {
        enemyTargets .Remove(this);
    }
}

1 Ответ

2 голосов
/ 19 июня 2020

A HashSet не имеет transform, а каждый Enemy имеет свою собственную ссылку .transform.

Не переопределяйте это свойство, а просто используйте

foreach(var enemy in Enemy.enemyTargets)
{ 
    var transform = enemy.transform;
    // use each transform
}

Вы также можете упростить его с помощью Linq

foreach(var transform in Enemy.enemyTargets.Select(enemy => enemy.transform)
{
    // use transform
}

Или вы можете добавить для него свойство, например

public static Transform[] enemyTargetTransforms => enemyTargets.Select(enemy => enemy.transform).ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...