@yraiv

Как реализован механизм покупки башен в Bloonds td6?

Как они сделали так, что когда ты нажимаешь на нужную башню, то она появляется в руке и ты пока не отпустишь мышку, будет передвигаться за ней?
Мне казалось, что при нажатии на кнопку/иконку башни, создаётся сразу объект и пока нажата мышка, то идёт постоянное считывание позиции положения мышки и когда ты отпускаешь её, то идёт проверка есть ли в этом месте что-то, что твой колайдер хочет задеть и если ничего нет, то он ставится окончательно. но! Я дико сомневаюсь, а если даже и так, то как это делают?
Я нашёл метод вроде нужный, но он не работает, он ловит только клики

public void OnMouseDrag()
    {
        Debug.Log("da");

    }


Это первое. А второе - как постоянно обновлять позицию? Я нашёл такой вариант -
mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

но я же не могу его запихать в update или fixedupdate т.к. Он будет есть ресурсы постоянно, а мне надо его вызывать лишь в определенный момент, а именно в момент покупки. Я думал сделать в апдейте проверку на bool переменную какую-нибудь, мол активна ли сейчас покупка(зажал ли человек палец), но это же тоже ресурсы ест... я не понимаю... Есть те, кто сталкивался с таким или подобным? как поступить?
  • Вопрос задан
  • 31 просмотр
Пригласить эксперта
Ответы на вопрос 1
@yraiv Автор вопроса
Спустя неделю мучений, я сделал это и совершенно случайно. Может кому пригодится

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class BuyTowers : MonoBehaviour, IPointerDownHandler, IPointerUpHandler 
{

    public GameObject PistolTowerGive;
    public GameObject PistolTowerSet;
    public bool UseTower;
    public Vector2 mousePos;
    private GameObject TowerPistol;
    public void Start()
    {
    }
    public void OnPointerDown(PointerEventData pointerEventData)
    {
        TowerPistol = Instantiate(PistolTowerGive, transform.position, Quaternion.identity);
        UseTower = true;


    }


    public void OnPointerUp(PointerEventData pointerEventData)
    {
        UseTower = false;

    }


    public void FixedUpdate()
    {
        if (UseTower == true)
        {
            TowerPistol.transform.position = mousePos;
        }

        mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    }



}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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