Срабатывание Тригерра у всех экземпляров префаба.
Добрый день, такая беда. У меня есть префаб противника, состоящий из нескольких частей. В одной из частей "пустышке" находится лист с теми игроками, которых противник заметил, заполняется он при соприкосновении коллайдера с этим игроком. Как только прикосновение окончилось - первый элемент из списка должен быть удален. НО(!) проблема в том, что скажем, у 5ти префабов противника одновременно срабатывает этот тригер при соприкосновении с игроком и все поля в классе внезапно оказываются общими, несмотря на мои попытки присвоить для каждого объекта свои собственные поля. Что я делаю не так? Ниже пример кода.
public class ScanSphere : MonoBehaviour
{

    public List<GameObject> players;
    public ScanSphere scan;
    private GameObject player1;
    private GameObject player2;
    private int i;

    private void Awake()    
    {
      
        scan = this.gameObject.GetComponent<ScanSphere>();
        scan.player1 = GameObject.FindGameObjectWithTag("Player1");
        scan.player2 = GameObject.FindGameObjectWithTag("Player2");
        scan.players = new List<GameObject>();
    }
    

    void OnTriggerEnter(Collider coll)
    {

        GameObject player = coll.gameObject;

        if (player.tag == "Player1")
        {
            scan.players.Add(player1);
        }

        if (player.tag == "Player2")
        {
            scan.players.Add(player2);
        }
    }

    void OnTriggerExit(Collider coll)
    {
      
        GameObject player = coll.gameObject;

        if (player.tag == "Player1")
        {
            scan.players.Remove(player1);
        }
        if (player.tag == "Player2")
        {
            scan.players.Remove(player2);
        }
    }
}
По итогу работы скрипта в логах можно обнаружить следующую закономерность.
  1. первый противник коснулся игрока, List 1= 1;
  2. второй противник коснулся игрока, List 2 = 1 и List1 = 2;
  3. третий противник коснулся игрока, List3 = 1 List2= 2 List3 = 3
......................................
То есть каждый предыдущий противник берет на себя все срабатывания новых. Я же ожидал иного результата, хотел получить:
  1. List1 = 1
  2. List2 = 2;
  3. List3 = 3;
Все противники создаются в отдельном классе через Instantiate из одного и того же префаба (клоны).

Лучший ответ:
я делал так что, каждый триггер был у каждого игрока и на нем висел этот лист. Получится так что у каждого имеется свой лист и свой триггер.



Просмотров: 231

N7 Molot #1 - 4 месяца назад 0

я делал так что, каждый триггер был у каждого игрока и на нем висел этот лист. Получится так что у каждого имеется свой лист и свой триггер.