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

Баг

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

Re: Баг

СообщениеДобавлено: 27 сен 2020, 14:33
Saltant
Выключай кнопку после нажатия и включай когда действие произведено
https://docs.unity3d.com/2018.3/Documen ... table.html

Re: Баг

СообщениеДобавлено: 27 сен 2020, 15:39
LothbrokSon
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);
            }
        }
}

Re: Баг

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

Re: Баг

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

Все сделал, работает, но к сожалению проблема не ушла.

Re: Баг

СообщениеДобавлено: 27 сен 2020, 21:22
samana
Вам нужно немного изменить логику передвижения.
Попробуйте этот код:
Синтаксис:
Используется 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;
        }
    }
}