WasTabon
@WasTabon

Почему при создании Merge игры невозможно спавнить новых юнитов на месте старых после их слияния?

Вот есть моя сцена

659333562aea3141457111.png

Я соединяю эти 2 юнита

6593336889377836612780.png

И на их месте могу спавнить новые

6593337cc3575829227767.png

Но если я соединю уже юнит, который был получен путем слияния двух других, то на его месте не смогу спавнить новый

6593338d4339a123023403.png

public class Merge : MonoBehaviour
    {
        public static Merge instance { get; private set; }
    
        [SerializeField] private GameObject[] _units;
    
        [SerializeField] private Transform[] _tilesKey;
        [SerializeField] private bool[] _tilesValue;
    
        [SerializeField] private GameObject _mergeParticles;
    
        private List<Transform> _freeTiles = new List<Transform>();
    
        public bool Connect(GameObject unitToDrag, GameObject unitToMerge)
        {
            MergeUnit unitOne = unitToDrag.GetComponent<MergeUnit>();
            MergeUnit unitTwo = unitToMerge.GetComponent<MergeUnit>();
            
            if (unitOne.Rank == unitTwo.Rank)
            {
                int rank = unitOne.Rank + 1;
                int randomUnit = RandomNumberInArray(_units.Length);
    
                Vector3 spawnPos = unitToMerge.transform.position;
    
                _freeTiles.Clear();
                SetTileKeyValue(unitOne.GetTile(), false);
    
                Destroy(unitToDrag.gameObject);
                Destroy(unitToMerge.gameObject);
    
                GameObject unitToSpawn = Instantiate(_units[randomUnit], spawnPos, Quaternion.identity);
                Instantiate(_mergeParticles, spawnPos, Quaternion.identity);
                unitToSpawn.GetComponent<MergeUnit>().Rank = rank;
    
                return true;
            }
            else
            {
                return false;
            }
        }
    
        public void Spawn()
        {
            GameObject randomUnit = _units[RandomNumberInArray(_units.Length)];
    
            _freeTiles.Clear();
            
            for (int i = 0; i < _tilesKey.Length; i++)
            {
                if (!_tilesValue[i])
                {
                    _freeTiles.Add(_tilesKey[i]);
                }
            }
            
            Transform randomTile;
            if (_freeTiles.Count > 0)
            {
                randomTile = _freeTiles[RandomNumberInArray(_freeTiles.Count)];
    
                SetTileKeyValue(randomTile, true);
                
                GameObject spawnedUnit = Instantiate(randomUnit, randomTile.position, Quaternion.identity);
                spawnedUnit.GetComponent<MergeUnit>().SetTile(randomTile);
            }
        }
    
    
        
        private void SetTileKeyValue(Transform randomTile, bool value)
        {
            int index = Array.IndexOf(_tilesKey, randomTile);
            if (index != -1 && index < _tilesValue.Length)
            {
                _tilesValue[index] = value;
            }
        }
    }
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы