Добавить множитель скорости мыши для оценки - PullRequest
0 голосов
/ 26 октября 2018

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

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

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

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

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


    }

}
0 голосов
/ 26 октября 2018

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

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...