Добавьте множитель скорости мыши, чтобы набрать очки

Я очень начинающий программист, поэтому, пожалуйста, простите, насколько примитивен этот код. Я пытаюсь сделать простую игру, в которой вы начисляете очки, пока мышь опущена, с множителем для скорости мыши. В настоящее время моя функция скорости мыши работает некорректно, на данный момент это фиксированная переменная. Если бы кто-нибудь мог указать на то, что я сделал не так, я был бы очень признателен. Извините, если на это уже есть ответ, я поискал в архивах и не нашел ничего, что полностью отвечало бы на мой вопрос.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UpdateScoreOnMousePress : MonoBehaviour {

    public Text scoreText;
    public int score;

    public Vector3 mouseDelta = Vector3.zero;
    private Vector3 lastPos = Vector3.zero;
    float mouseSpeed;

    float timeToGo = 0.5f;

    //Initialization
    void Start()
    {
        timeToGo = Time.fixedTime;
    }

    void Update()
    {

    }

    void FixedUpdate()
    {
        //Checks if it has been 0.5 seconds since last call
        if (Time.fixedTime > timeToGo)
        {
            //Updates score on mouse down
            scoreText.text = "Score: " + score + (int)mouseSpeed*0.1;

            //Start mousePosition
            if (Input.GetMouseButtonDown(0))
            {
                mouseDelta = Input.mousePosition;
            }

            else if (Input.GetMouseButton(0))
            {
                mouseDelta = Input.mousePosition - lastPos;

                score++;

                //Shows mouse position and magnitude in console
                Debug.Log("delta X : " + mouseDelta.x);
                Debug.Log("delta Y : " + mouseDelta.y);
                Debug.Log("delta distance : " + mouseDelta.magnitude);

                //Updates mousePosition
                lastPos = Input.mousePosition;

                //Updates mouseSpeed
                mouseSpeed = mouseDelta.magnitude / Time.deltaTime;
            }

            //Updates timeToGo
            timeToGo = Time.fixedTime + 0.5f;
        }
    }
}

Когда вы нажимаете левую кнопку мыши, код зарегистрирует его из «if (Input.GetMouseButtonDown (0))», а «else if» после этого никогда не запускается, так как он также проверяет, нажата ли кнопка мыши, и поэтому вы делаете никогда не запускайте код внутри вашего else if.

Skdy 26.10.2018 07:21
0
1
83
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Кажется, вы проверяете, нажата ли основная кнопка мыши дважды. От обоих

if (Input.GetMouseButtonDown(0))

а также

else if (Input.GetMouseButton(0))

Кроме того, вам также придется обновлять последнее положение мыши на каждой итерации, где на данный момент вы делаете это только при нажатии кнопки мыши, что не является неправильным, но вам придется делать это, когда кнопка также не нажата.

Я верю, что ваш код можно исправить, если вы измените его на следующее:

    void FixedUpdate()
    {
        //Checks if it has been 0.5 seconds since last call
        if (Time.fixedTime > timeToGo)
        {
            //Updates score on mouse down
            scoreText.text = "Score: " + score + (int)mouseSpeed*0.1;    

            if (Input.GetMouseButtonDown(0))
            {

                mouseDelta = Input.mousePosition - lastPos;

                score++;

                //Shows mouse position and magnitude in console
                Debug.Log("delta X : " + mouseDelta.x);
                Debug.Log("delta Y : " + mouseDelta.y);
                Debug.Log("delta distance : " + mouseDelta.magnitude);

                //Updates mouseSpeed
                mouseSpeed = mouseDelta.magnitude / Time.deltaTime;
            }
            lastPos = Input.mousePosition;
            //Updates timeToGo
            timeToGo = Time.fixedTime + 0.5f;
        }
    }

Это не решает вашу проблему с распределением очков в зависимости от пройденного расстояния, но вы сможете реализовать это с помощью mouseDelta.

Всем спасибо за совет. Вот окончательный рабочий код для всех, кому он может понадобиться в будущем. При желании измените значения множителей скорости, а также частоту вызова фиксированного обновления.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UpdateScoreWhileMousePressed : MonoBehaviour {

    public Vector3 mouseDelta = Vector3.zero;
    private Vector3 lastPos = Vector3.zero;

    public float mouseSpeed;

    public Text scoretext;
    public int score;

    public float timeToGo;

    // Use this for initialization
    void Start () {

        timeToGo = Time.fixedTime;
        mouseDelta = Input.mousePosition;
        lastPos = Input.mousePosition;

    }

    // Update is called once per frame
    void Update () {



    }

    // Update is called every 0.2 seconds
    private void FixedUpdate()
    {
        if(Time.fixedTime > timeToGo)
        {

            //Update mouseDelta
            mouseDelta = Input.mousePosition - lastPos;

            //Calculate mouseSpeed
            mouseSpeed = mouseDelta.magnitude / Time.deltaTime;

            scoretext.text = "Score: " + score;

            Debug.Log("Speed: " + mouseSpeed);
            Debug.Log("Score: " + score);

            //If the mouse is being pressed the score will increase by 1 every call
            if (Input.GetMouseButton(0))
            {

                if(mouseSpeed <= 1000)
                {
                    score += 1;
                }

                //And receive multipliers for faster speed
                else if(mouseSpeed > 1000 & mouseSpeed < 2000)
                {
                    score += 1 * 2;
                }

                else if(mouseSpeed >= 2000 & mouseSpeed < 4000)
                {
                    score += 1 * 3;
                }

                else if(mouseSpeed >=4000 & mouseSpeed < 8000)
                {
                    score += 1 * 4;
                }

                else if(mouseSpeed >= 8000)
                {
                    score += 1 * 5;
                }

            }

            //Update lastPost
            lastPos = Input.mousePosition;

            //Update timeToGo
            timeToGo = Time.fixedTime + 0.2f;
        }


    }

}

Другие вопросы по теме