Страница 1 из 1

mousedown второе нажатие

СообщениеДобавлено: 04 мар 2021, 16:12
Yellow12Phoenix
Всем привет
Есть задача:
Дожно быть:
при первом нажатии - должна воникнуть башня №1 и потратиться 50 золота
при втором нажатии - должна воникнуть башня №2 и потратиться ещё 50 золота
На практике: если есть 100 золота при первом нажатии возникает башня №2, если 50 золота, то башня №1
при втором нажатии - ничего не происходит
Просьба подсказать
Синтаксис:
Используется csharp
public GameObject Tower1;
        public GameObject Tower2;      
        public Vector3 offset;
        public GameObject curTower;
        int empty = 0; 
        public GameObject Controller;
       


       

        void Update()
    {
                Controller = GameObject.Find("Main Camera");

               

    }
        void OnMouseDown()
        {
                if (empty == 0 && Controller.GetComponent<GameController>().Gold >= 50)
                {
                        curTower = GameObject.Instantiate(Tower1, transform.position + offset, Quaternion.identity) as GameObject;
                        empty = 1;
                        Controller.GetComponent<GameController>().Gold -= 50;
                       
                }
                if (empty == 1 && Controller.GetComponent<GameController>().Gold >= 50 )
                {
                        Destroy(curTower);
                        curTower = GameObject.Instantiate(Tower2, transform.position + offset, Quaternion.identity) as GameObject;
                        empty = 2;
                        Controller.GetComponent<GameController>().Gold -= 50;
                }

        }
       
       

}
 

Заранее спасибо

Re: mousedown второе нажатие

СообщениеДобавлено: 04 мар 2021, 16:26
Alkos26Rus
Синтаксис:
Используется csharp
        void OnMouseDown()
        {
                if (empty == 0 && Controller.GetComponent<GameController>().Gold >= 50)
                {
                        curTower = GameObject.Instantiate(Tower1, transform.position + offset, Quaternion.identity) as GameObject;
                        empty = 1;
                        Controller.GetComponent<GameController>().Gold -= 50;
                       
                }
                else if (empty == 1 && Controller.GetComponent<GameController>().Gold >= 50 )
                {
                        Destroy(curTower);
                        curTower = GameObject.Instantiate(Tower2, transform.position + offset, Quaternion.identity) as GameObject;
                        empty = 2;
                        Controller.GetComponent<GameController>().Gold -= 50;
                }

        }
 

Re: mousedown второе нажатие

СообщениеДобавлено: 04 мар 2021, 16:45
Yellow12Phoenix
Alkos26Rus писал(а):
Синтаксис:
Используется csharp
        void OnMouseDown()
        {
                if (empty == 0 && Controller.GetComponent<GameController>().Gold >= 50)
                {
                        curTower = GameObject.Instantiate(Tower1, transform.position + offset, Quaternion.identity) as GameObject;
                        empty = 1;
                        Controller.GetComponent<GameController>().Gold -= 50;
                       
                }
                else if (empty == 1 && Controller.GetComponent<GameController>().Gold >= 50 )
                {
                        Destroy(curTower);
                        curTower = GameObject.Instantiate(Tower2, transform.position + offset, Quaternion.identity) as GameObject;
                        empty = 2;
                        Controller.GetComponent<GameController>().Gold -= 50;
                }

        }
 

Ставится башня№1, башню №2 вообще невозможно поставить

Re: mousedown второе нажатие

СообщениеДобавлено: 04 мар 2021, 17:03
1max1
По коду все правильно, раскидывай логи и смотри ошибки. Возможно Tower2 у тебя нул или голды мало.

Re: mousedown второе нажатие

СообщениеДобавлено: 04 мар 2021, 17:47
Yellow12Phoenix
1max1 писал(а):По коду все правильно, раскидывай логи и смотри ошибки. Возможно Tower2 у тебя нул или голды мало.


Если без else if, то оба дебуга, если с else if, то один
Синтаксис:
Используется csharp

void OnMouseDown()
        {
                if (empty == 0 && Controller.GetComponent<GameController>().Gold >= 50)
                {
                        curTower = GameObject.Instantiate(Tower1, transform.position + offset, Quaternion.identity) as GameObject;
                        empty = 1;
                        Controller.GetComponent<GameController>().Gold -= 50;
                        Debug.Log("Empty 0");           }
                if (empty == 1 && Controller.GetComponent<GameController>().Gold >= 50 )
                {
                        Debug.Log("Empty 1");
                        Destroy(curTower);
                        curTower = GameObject.Instantiate(Tower2, transform.position + offset, Quaternion.identity) as GameObject;
                        empty = 2;
                        Controller.GetComponent<GameController>().Gold -= 50;
                }

        }
 

Re: mousedown второе нажатие

СообщениеДобавлено: 04 мар 2021, 21:06
1max1
Ты два раза нажимаешь? Тот объект на который кликаешь всегда никогда не уничтожается?

Re: mousedown второе нажатие

СообщениеДобавлено: 05 мар 2021, 09:49
Xtir
Зачем так всё усложнять?
Синтаксис:
Используется csharp
touchCount++;
switch(touchCount)
{
case 1:
//проверяем голду и создаём башню 1
break;
case 2:
//проверяем голду и создаём башню 2
break;
}

Re: mousedown второе нажатие

СообщениеДобавлено: 05 мар 2021, 11:31
Yellow12Phoenix
1max1 писал(а):Ты два раза нажимаешь? Тот объект на который кликаешь всегда никогда не уничтожается?

Если уничтожить вручную башню№1, то башня№2 ставится

Re: mousedown второе нажатие

СообщениеДобавлено: 05 мар 2021, 12:30
Yellow12Phoenix
Xtir писал(а):Зачем так всё усложнять?
Синтаксис:
Используется csharp
touchCount++;
switch(touchCount)
{
case 1:
//проверяем голду и создаём башню 1
break;
case 2:
//проверяем голду и создаём башню 2
break;
}

Сори я не так часто пользуюсь Switch Case, можешь более подробно расписать как и где поставить условия для case 1 и case 2? :ympray:

А то у меня что-то не получается:
Синтаксис:
Используется csharp
void OnMouseDown(int touchCount)
        {
               

                if (touchCount == 0 && Controller.GetComponent<GameController>().Gold >= 50)
                {
                        touchCount = 1;
                }


                if (touchCount ==2 && Controller.GetComponent<GameController>().Gold >= 50)
        {
                        touchCount = 3;
        }
               
               
                switch (touchCount)
                {
                        case 1:
                                curTower = GameObject.Instantiate(Tower1, transform.position + offset, Quaternion.identity) as GameObject;

                                Controller.GetComponent<GameController>().Gold -= 50;
                                Debug.Log("Empty 0");
                                emp = true;
                                this.gameObject.tag = "Tower1";
                                touchCount = 2;
                               
                                break;
                        case 3:
                                //проверяем голду и создаём башню 2
                                Debug.Log("Empty 1");
                                Destroy(Tower1);
                                curTower = GameObject.Instantiate(Tower2, transform.position + offset, Quaternion.identity) as GameObject;

                                Controller.GetComponent<GameController>().Gold -= 50;
                                break;
                }

        }
 

Re: mousedown второе нажатие

СообщениеДобавлено: 05 мар 2021, 13:30
TeslaGan
Yellow12Phoenix писал(а):
1max1 писал(а):Ты два раза нажимаешь? Тот объект на который кликаешь всегда никогда не уничтожается?

Если уничтожить вручную башню№1, то башня№2 ставится

проверьте области клика. возможно у вас башня1 перекрывает зону активности Объекта, на котором висит OnMouseDown() и она перестает реагировать на нажатие.

Re: mousedown второе нажатие

СообщениеДобавлено: 05 мар 2021, 14:38
Yellow12Phoenix
Разобрался Перегораживал коллайдер сферы, который отвечал за "зону действия" башни
Всем спасибо за помощь, если бы не советы давно забил бы
Ещё раз всем спасибо :D
TeslaGan писал(а):
Yellow12Phoenix писал(а):
1max1 писал(а):Ты два раза нажимаешь? Тот объект на который кликаешь всегда никогда не уничтожается?

Если уничтожить вручную башню№1, то башня№2 ставится

проверьте области клика. возможно у вас башня1 перекрывает зону активности Объекта, на котором висит OnMouseDown() и она перестает реагировать на нажатие.