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

Программирование на Юнити.

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

Сообщение Yellow12Phoenix 04 мар 2021, 16:12

Всем привет
Есть задача:
Дожно быть:
при первом нажатии - должна воникнуть башня №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;
                }

        }
       
       

}
 

Заранее спасибо
Yellow12Phoenix
UNец
 
Сообщения: 25
Зарегистрирован: 17 авг 2020, 20:44

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

Сообщение Alkos26Rus 04 мар 2021, 16:26

Синтаксис:
Используется 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;
                }

        }
 
Единица - ноль
Аватара пользователя
Alkos26Rus
UNIверсал
 
Сообщения: 358
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

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

Сообщение Yellow12Phoenix 04 мар 2021, 16:45

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 вообще невозможно поставить
Yellow12Phoenix
UNец
 
Сообщения: 25
Зарегистрирован: 17 авг 2020, 20:44

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

Сообщение 1max1 04 мар 2021, 17:03

По коду все правильно, раскидывай логи и смотри ошибки. Возможно Tower2 у тебя нул или голды мало.
Аватара пользователя
1max1
Адепт
 
Сообщения: 4552
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение Yellow12Phoenix 04 мар 2021, 17:47

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;
                }

        }
 
Yellow12Phoenix
UNец
 
Сообщения: 25
Зарегистрирован: 17 авг 2020, 20:44

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

Сообщение 1max1 04 мар 2021, 21:06

Ты два раза нажимаешь? Тот объект на который кликаешь всегда никогда не уничтожается?
Аватара пользователя
1max1
Адепт
 
Сообщения: 4552
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение Xtir 05 мар 2021, 09:49

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

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

Сообщение Yellow12Phoenix 05 мар 2021, 11:31

1max1 писал(а):Ты два раза нажимаешь? Тот объект на который кликаешь всегда никогда не уничтожается?

Если уничтожить вручную башню№1, то башня№2 ставится
Yellow12Phoenix
UNец
 
Сообщения: 25
Зарегистрирован: 17 авг 2020, 20:44

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

Сообщение Yellow12Phoenix 05 мар 2021, 12:30

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;
                }

        }
 
Yellow12Phoenix
UNец
 
Сообщения: 25
Зарегистрирован: 17 авг 2020, 20:44

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

Сообщение TeslaGan 05 мар 2021, 13:30

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

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

проверьте области клика. возможно у вас башня1 перекрывает зону активности Объекта, на котором висит OnMouseDown() и она перестает реагировать на нажатие.
TeslaGan
UNIт
 
Сообщения: 126
Зарегистрирован: 01 авг 2015, 18:00

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

Сообщение Yellow12Phoenix 05 мар 2021, 14:38

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

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

проверьте области клика. возможно у вас башня1 перекрывает зону активности Объекта, на котором висит OnMouseDown() и она перестает реагировать на нажатие.
Последний раз редактировалось Yellow12Phoenix 05 мар 2021, 15:06, всего редактировалось 1 раз.
Yellow12Phoenix
UNец
 
Сообщения: 25
Зарегистрирован: 17 авг 2020, 20:44


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10