Как мне заставить эту систему контрольных точек работать в unity3d? - PullRequest
0 голосов
/ 08 октября 2019

Я хочу, чтобы игрок сначала стартовал со стартовой позиции. Затем начните с контрольной точки после того, как они закончили первый уровень. Я пробовал разные итерации этого скрипта, предполагается использовать проверку bool, если игрок прошел через триггер, и если его позиция будет равна контрольной точке на старте. Он должен помнить bool, когда игра выключается и снова включается.

Прямо сейчас игрок всегда начинает с контрольной точки.

Я пытался создать свой логический логический элемент с playprefs, но в итоге использовалBoolPrefs, который все еще не работал.

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

public class Player : MonoBehaviour
{
    public Rigidbody player;
    public Transform startPoint;
    public Transform checkPoint;

    private void Start()
    {
        if (PlayerPrefsX.GetBool("level01Complete", false))
        {
            player.transform.position = startPoint.position;
        }

        if (PlayerPrefsX.GetBool("level01Complete", true))
        {
            player.transform.position = checkPoint.position;
        }
    }



    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "HubTrigger")
        {
            PlayerPrefsX.SetBool("level01Complete", true);
        }
        else
        {
            PlayerPrefsX.SetBool("level01Complete", false);
        }
    }

}

Вот скрипт BoolPrefs, который я использую в настоящее время.

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

public class PlayerPrefsX 
{


        public static void SetBool(string name, bool booleanValue)
        {
            PlayerPrefs.SetInt(name, booleanValue ? 1 : 0);
        }

        public static bool GetBool(string name)
        {
            return PlayerPrefs.GetInt(name) == 1 ? true : false;
        }

        public static bool GetBool(string name, bool defaultValue)
        {
            if (PlayerPrefs.HasKey(name))
            {
                return GetBool(name);
            }

            return defaultValue;
        }

}

Я новичок в использовании PlayerPrefs, так что может быть что-тоОчевидно, что я пропускаю.

HubTrigger - это триггер, через который вы проходите после завершения первого уровня. Поэтому в первый раз, когда вы играете, вы начинаете с одного места, затем, когда вы проходите через hubtrigger, вы проходите первый уровень, и с этого момента вы начинаете с контрольной точки, когда загружаете игру.

1 Ответ

0 голосов
/ 08 октября 2019

PlayerPrefsX выглядит хорошо. Кажется, вы используете это неправильно. Вы должны проверить if (PlayerPrefsX.GetBool("level01Complete", false)), и если это правда, затем установить позицию контрольной точки и установить начальную позицию в противном случае:

private void Start()
{
    if (PlayerPrefsX.GetBool("level01Complete", false))
    {
        player.transform.position = checkPoint.position;
    }
    else 
    {
        player.transform.position = startPoint.position;
    }
}

Для OnTriggerEnter, вам действительно нужно только установить level01Complete всобытие, которое вы побили уровень 1:

private void OnTriggerEnter(Collider other)
{
    if (other.gameObject.tag == "HubTrigger")
    {
        PlayerPrefsX.SetBool("level01Complete", true);
    }
}
...