Баг

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Баг

Сообщение LothbrokSon 27 сен 2020, 13:27

Все привет! Можно ли как то запретить спам кнопки в игре? (например задать ей кол-во нажатий в минуту или сделать так, чтобы пока персонаж не проделает движение функция кнопки была неактивной) У персонажа в моей игре есть 3 линии передвижения (Раннер) и получается так что при спаме кнопок движения персонаж просто на просто слетает с этих трех линий и оказывается между двумя из них. Кто нибудь может помочь с исправлением этого бага?
LothbrokSon
UNец
 
Сообщения: 7
Зарегистрирован: 24 сен 2020, 12:13

Re: Баг

Сообщение Saltant 27 сен 2020, 14:33

Выключай кнопку после нажатия и включай когда действие произведено
https://docs.unity3d.com/2018.3/Documen ... table.html
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Баг

Сообщение LothbrokSon 27 сен 2020, 15:39

Saltant писал(а):Выключай кнопку после нажатия и включай когда действие произведено
https://docs.unity3d.com/2018.3/Documen ... table.html

Можешь пожалуйста помочь вписать это действие в этот код? У меня получается, но после деактивации кнопка активируется только после повторного нажатия.
Синтаксис:
Используется csharp
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Player : MonoBehaviour
{

    public float speed;
    public float increment;
    public float maxY;
    public float minY;

    private Vector2 targetPos;

    public int health;

    public GameObject moveEffect;
    public Animator camAnim;
    public Text healthDisplay;

    public GameObject spawner;
    public GameObject restartDisplay;
    public GameObject Interface;
    public GameObject ScoreManager;

    public GameObject UpMoveSound;
    public GameObject DownMoveSound;

    private void Update()
    {

        if (health <= 0)
        {
            spawner.SetActive(false);
            Interface.SetActive(false);
            ScoreManager.SetActive(false);
            restartDisplay.SetActive(true);
            Destroy(gameObject);
        }

        healthDisplay.text = health.ToString();

        transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            Up();
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            Down();  
        }        
    }
        public void Up()
        {
            if (transform.position.y < maxY)
            {      
                Instantiate(UpMoveSound, transform.position, Quaternion.identity);
                camAnim.SetTrigger("shake");
                Instantiate(moveEffect, transform.position, Quaternion.identity);
                targetPos = new Vector2(transform.position.x, transform.position.y + increment);
            }
        }

        public void Down()
        {
            if (transform.position.y > minY)
            {
                Instantiate(DownMoveSound, transform.position, Quaternion.identity);
                camAnim.SetTrigger("shake");
                Instantiate(moveEffect, transform.position, Quaternion.identity);
                targetPos = new Vector2(transform.position.x, transform.position.y - increment);
            }
        }
}
LothbrokSon
UNец
 
Сообщения: 7
Зарегистрирован: 24 сен 2020, 12:13

Re: Баг

Сообщение Saltant 27 сен 2020, 16:03

button.interactable = true - будет означать что кнопка включена, а button.interactable = false - будет означать что кнопка выключена. Всё максимально просто. Выключаешь когда начинается выполняться действие назначенное на эту кнопку и включаешь когда действие заканчивается, грубо говоря в начале метода выключаешь, в конце метода включаешь.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Баг

Сообщение LothbrokSon 27 сен 2020, 20:26

Saltant писал(а):button.interactable = true - будет означать что кнопка включена, а button.interactable = false - будет означать что кнопка выключена. Всё максимально просто. Выключаешь когда начинается выполняться действие назначенное на эту кнопку и включаешь когда действие заканчивается, грубо говоря в начале метода выключаешь, в конце метода включаешь.

Все сделал, работает, но к сожалению проблема не ушла.
LothbrokSon
UNец
 
Сообщения: 7
Зарегистрирован: 24 сен 2020, 12:13

Re: Баг

Сообщение samana 27 сен 2020, 21:22

Вам нужно немного изменить логику передвижения.
Попробуйте этот код:
Синтаксис:
Используется csharp
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Player : MonoBehaviour
{

    public float speed;
    public float increment;
    public float maxY;
    public float minY;

    private float targetY;

    public int health;

    public GameObject moveEffect;
    public Animator camAnim;
    public Text healthDisplay;

    public GameObject spawner;
    public GameObject restartDisplay;
    public GameObject Interface;
    public GameObject ScoreManager;

    public GameObject UpMoveSound;
    public GameObject DownMoveSound;

    private void Update()
    {

        if (health <= 0)
        {
            spawner.SetActive(false);
            Interface.SetActive(false);
            ScoreManager.SetActive(false);
            restartDisplay.SetActive(true);
            Destroy(gameObject);
        }

        healthDisplay.text = health.ToString();

        Vector2 targetPos = new Vector2(transform.position.x, targetY);
        transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            Up();
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            Down();
        }
    }
    public void Up()
    {
        if (targetY + increment <= maxY)
        {
            Instantiate(UpMoveSound, transform.position, Quaternion.identity);
            camAnim.SetTrigger("shake");
            Instantiate(moveEffect, transform.position, Quaternion.identity);

            targetY += increment;
        }
    }

    public void Down()
    {
        if (targetY - increment >= minY)
        {
            Instantiate(DownMoveSound, transform.position, Quaternion.identity);
            camAnim.SetTrigger("shake");
            Instantiate(moveEffect, transform.position, Quaternion.identity);

            targetY -= increment;
        }
    }
}
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Google [Bot] и гости: 24