Почему при Instantiate каждый новый объект появляется выше предыдущего?

В окне способностей игрок выбирает нужную и нажимает на землю. Там появляется объект, например, турель огневой поддержки. По Х и Z турель соответствует хитпоинту рейкаста. Однако ее положение по Y выше. А при последующих созданиях турелей их положения по Y инкрементируются вдвое. В итоге новые турели оказываются в космическом пространстве и не могут оказывать огневую поддержку.

Подскажите, в чем причина, братцы, код прилагаю:

using UnityEngine;

public class StrikeMenu : MonoBehaviour
{

    private bool startStrike = false;
    
    private int IndexStrike = -1;           
    private int IndexStrikeMenuOpen = -1;   
    
    public StrikeMode SMode = null;        
    
    private Ray _ray;
    private RaycastHit _hit;
    private RaycastHit pointSpawn;
            
    public GameObject _openstrikemenu;      
    public GameObject _openbutton;
    public GameObject _closebutton;
    public GameObject _cancelbutton;



    private void Start()
    {

        _openstrikemenu.gameObject.SetActive(false);
        _closebutton.gameObject.SetActive(false);
        _cancelbutton.gameObject.SetActive(false);
        
    }


    private void Update()
    {

        if (startStrike == true)

        {

            if (Input.GetMouseButton(button: 0))

            {
                
                if (SMode.WarTimer >= SMode.StrikeList[IndexStrike].Reload)
                    
                {

                    _ray = Camera.main.ScreenPointToRay(Input.mousePosition);

                    if (Physics.Raycast(_ray, out _hit))

                    {
                                                
                            Instantiate (SMode.StrikeList[IndexStrike].Strike, new Vector3(_hit.point.x, _hit.point.y, _hit.point.z), Quaternion.identity);
                                                    
                            SMode.WarTimer -= SMode.StrikeList[IndexStrike].Reload;
                            
                            _openbutton.gameObject.SetActive(true);
                            _cancelbutton.gameObject.SetActive(false);

                            IndexStrike = -1;

                            startStrike = false;
                            
                    }
                }
            }
        }
     }

    public void StartStrike (int ButtonClickStrike)                        
    {
        if (SMode.WarTimer >= SMode.StrikeList[ButtonClickStrike].Reload)
        {
            
            startStrike = true;

            IndexStrike = ButtonClickStrike; 
                                    
            _openstrikemenu.gameObject.SetActive(false);
            _closebutton.gameObject.SetActive(false);
            _openbutton.gameObject.SetActive(false);
            _cancelbutton.gameObject.SetActive(true);

            IndexStrikeMenuOpen = -1;
            Debug.Log("Start Strike");
        }
    }

// далее часть про UI
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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