Hello hello.
Now I have a prefab:
SpawnColliderObject look:
SpawnColliderObserver.cs:
public class SpawnColliderObserver : MonoBehaviour, ITriggerColliderEnter<Vector3>
{
public event Action<Vector3> OnTriggerColliderEnter = delegate(Vector3 v) { };
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
OnTriggerColliderEnter?.Invoke(transform.parent.position);
Debug.Log($"{transform.parent.name} was sent the event");
}
}
}
Then, I have a model:
public void Init()
{
_roadsList = new List<GameObject>();
if(_roadData == null)
{
throw new FileNotFoundException($"Road Data not found");
}
for (int i = 0; i < _roadData.PoolSize; i++)
{
GameObject Road = GameObject.Instantiate(_roadData.RoadPrefab, _roadData.SpawnPosition, Quaternion.identity);
Road.name = $"Road{i}";
_roadsList.Add(Road);
Road.GetComponentInChildren<SpawnColliderObserver>().OnTriggerColliderEnter += SpawnNewRoad;
Road.SetActive(false);
}
_roadsList[_roadCounter].SetActive(true);
_roadCounter++;
SetRoadIndex?.Invoke(_roadCounter);
_scrollSpeed = _roadData.ScrollSpeed;
}
private void SpawnNewRoad(Vector3 pos)
{
_roadsList[_roadCounter].transform.position = new Vector3(
_roadsList[_roadCounter].transform.position.x,
_roadsList[_roadCounter].transform.position.y,
_roadsList[_roadCounter].transform.position.z + _roadsList[_roadCounter].transform.localScale.z
);
if (!_roadsList[_roadCounter].activeInHierarchy)
{
_roadsList[_roadCounter].SetActive(true);
}
_roadCounter++;
if (_roadCounter >= _roadsList.Count) _roadCounter = 0;
SetRoadIndex?.Invoke(_roadCounter);
}
And when Player come in one of colliders, happens two events from both instances. _roadData.RoadPrefab - is a field of ScriptableObject. I’ve also try to load prefab directly, trough Resource.Load, same effect. I can’t understand what happening.