Использую Mirror для мультиплеера в своем проекте.
Создал игрока и два условных "Дерева". Когда игрок заходит в область дерева и нажимает "E", с дерева падает "Ветка".
Вопрос в следующем, почему когда хост бегает от одного дерева к другому и нажимает E все работает отлично, ветки спавнятся как и должны, но когда подключается клиент и делает ровно те же действия, иногда спавн ветки происходит на другом дереве (единожды). В условиях выхода с триггера ставил обьект спавна как null, но там возникают ошибки самого Mirror, некая защита, чтобы клиенты не спавнили обьекты, которых на них нет.
//Код игрока//
[Command]
private void SpawnBranch()
{
GameObject spawnedBranch = Instantiate(currentTree.GetComponent<Tree>().getBranch(), currentTree.transform.position, Quaternion.identity);
NetworkServer.Spawn(spawnedBranch);
}
private void OnTriggerEnter(Collider other)
{
// Проверяем, если игрок вошел в зону дерева
if (other.CompareTag("Tree"))
{
currentTree = other.gameObject;
canSpawn = true;
Debug.Log("On of tree");
}
}
private void OnTriggerExit(Collider other)
{
// Проверяем, если игрок вышел из зоны дерева
if (other.CompareTag("Tree"))
{
canSpawn = false;
Debug.Log("Out of tree");
}
}
//Код дерева//
[SerializeField] GameObject branchPrefab; // Префаб ветки для спавна
public GameObject getBranch()
{
return branchPrefab;
}