увеличить скорость игрока в зависимости от результата (бесконечная игра на лыжах) - PullRequest
0 голосов
/ 06 августа 2020

Я делаю бесконечную игру на лыжах, похожую на альт и лыжное сафари, и мне нужна помощь в увеличении скорости моего игрока на основе количества выполненных им трюков (сальто назад и т. Д. c). Вот код, который я написал до сих пор: (этот скрипт вычисляет счет игрока на основе сальто назад)

public class tricksScore : MonoBehaviour
{
    private float flips = 0;
    private float deltaRotation = 0;
    private float currentRotation = 0;
    private float WindupRotation = 0;
    public static Rigidbody2D rigbod;
    float divideByNum = 0.25f;
    public Text scores;
    public int trickscore;
    private int iflip;

    // Start is called before the first frame update
    void Start()
    {
        scores = GetComponent<Text>();
    }

    // Update is called once per frame
    void Update()
    {
        deltaRotation = (currentRotation - rigbod.transform.eulerAngles.z);
        currentRotation = rigbod.transform.eulerAngles.z;
        if (deltaRotation >= 300)
            deltaRotation -= 360;
        if (deltaRotation <= -300)
            deltaRotation += 360;
        WindupRotation += (deltaRotation);
        flips = WindupRotation / 340;
        iflip = (int)flips;
        iflip = iflip * -1;
        trickscore = iflip * 10;
        Debug.Log(trickscore);
        scores.text = "score " + trickscore;
    }
}

Я импортирую переменную trickscore в скрипт, отвечающий за движение персонажа:

[SerializeField] private tricksScore trickscript;
public int trickscore;
public int oldScore = 0;
public int incInScore;
trickscore = trickscript.trickscore;

incInScore = trickscript.trickscore - oldScore;
if (incInScore >= 10)
{
    oldScore = trickscript.trickscore;
}
if (incInScore > 1 && incInScore <= 10)
{
    speed = speed + 10.15f;
}
else if (incInScore > 10 && incInScore <= 20)
{
    speed = speed + 0.25f;
}
else if (incInScore > 20 && incInScore <= 50)
{
    speed = speed + 0.50f;
}
else if (incInScore > 50 && incInScore <= 100)
{
    speed = speed + 0.75f;
}
else if (incInScore > 100 && incInScore <= 200)
{
    speed = speed + 1f;
}
else if (incInScore > 200)
{
    speed = speed + 2f;
} 

проблема в том, что скорость игрока не увеличивается, когда я выполняю обратное сальто, также я думаю, что переменная, которая хранит счет игрока (trickscore), также сломалась, потому что до написания скрипта она использовала для отображения игроки подсчитывают очки в консоли (debug.log) и в текстовом объекте («scores»), но больше ничего не происходит. Я полный код noob ie, и это первая игра, которую я делаю, и из-за этой проблемы вся разработка застряла на много дней, поэтому я буду очень признателен за любую помощь. Спасибо

1 Ответ

0 голосов
/ 06 августа 2020

я предполагаю, что у вас есть оба сценария, прикрепленные к вашему игровому объекту, в идеале было бы разделить вычисления и иметь один сценарий, обрабатывающий их, привыкните к этому, и вы избавите себя от множества ошибок (это лучше, чем передавать сценарии и есть много путаницы), пример в одном файле (который также должен работать, если используется ваш проигрыватель "currentSpeed"):

using UnityEngine;
using UnityEngine.UI;

public class tricksScore : MonoBehaviour
{
    private float flips = 0;
    private float deltaRotation = 0;
    private float currentRotation = 0;
    private float WindupRotation = 0;
    public static Rigidbody2D rigbod;
    float divideByNum = 0.25f;
    public Text scores;
    public int trickscore;
    private int iflip;
    public int oldScore = 0;
    public int incInScore;
    public float currentSpeed;

    // Start is called before the first frame update
    void Start()
    {
        scores = GetComponent<Text>();
    }

    // Update is called once per frame
    void Update()
    {
        deltaRotation = (currentRotation - rigbod.transform.eulerAngles.z);
        currentRotation = rigbod.transform.eulerAngles.z;
        if (deltaRotation >= 300)
            deltaRotation -= 360;
        if (deltaRotation <= -300)
            deltaRotation += 360;
        WindupRotation += (deltaRotation);
        flips = WindupRotation / 340;
        iflip = (int)flips;
        iflip = iflip * -1;
        trickscore = iflip * 10;

        currentSpeed += Calculations.CalculateSpeed(trickscore,oldScore);
    }


}
//this should be in a separate file
public class Calculations
{
    public static float CalculateSpeed(float currentScore, float oldScore)
    {
        var incInScore = currentScore - oldScore;

        if (incInScore > 1 && incInScore <= 10)
        {
            return 10.15f;
        }
        else if (incInScore > 10 && incInScore <= 20)
        {
            return 0.25f;
        }
        else if (incInScore > 20 && incInScore <= 50)
        {
            return 0.50f;
        }
        else if (incInScore > 50 && incInScore <= 100)
        {
            return 0.75f;
        }
        else if (incInScore > 100 && incInScore <= 200)
        {
            return 1f;
        }
        else
        {
            return 2f;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...