После окончания сцены нужно начинать новую сцену - PullRequest
0 голосов
/ 26 февраля 2019

Я делаю развивающую игру для детей ... Но я остановился в конце сцены, я не мог сделать код, чтобы начать новую сцену ... в Первом сценарии, когда играешь в игру, сцены не останавливаются до тех пор, покапоследняя сцена.

YouWin.pictureInPlace++;

Я много искал и не нашел свой вопрос, поэтому обратился к вам.Было проще сделать кнопку, чтобы перейти на следующую сцену, но я предпочитаю делать это автоматически, я думаю, что эта задача может быть выполнена с помощью логического значения, но она требует ссылки на игровой объект ... и сценарий на 2 изображениях.Первый скрипт (менеджер) надел четыре изображения на холсте .. Второй (YouWin) я поставил на пустой GameObject .. спасибо за помощь

Первый скрипт (менеджер)

using UnityEngine;
using UnityEngine.EventSystems;

public class Manager : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    Vector2 pos1;
    public GameObject pos2;
    private bool canMove;
    public GameObject winner;
    void Start()
    {
        pos1 = transform.position;
        canMove = true;
    }

    public void OnBeginDrag(PointerEventData eventData)
    {
        Debug.Log(eventData);
    }

    public void OnDrag(PointerEventData eventData)
    {
        if (canMove)
            transform.position = Input.mousePosition;       
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        float distance = Vector3.Distance(transform.position, pos2.transform.position);
        if (distance < 50)
        {
            transform.position = pos2.transform.position;
            transform.localScale = pos2.transform.localScale;
            canMove = false;
            winner.GetComponent<YouWin>().pictureInPlace++;   
        }
        else
        {
            transform.position = pos1;
        }
    }  
}

Второй скрипт (YouWin)

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

public class YouWin : MonoBehaviour
{
public int NumberOfImages;
public int pictureInPlace;
public string sceneName;

    void Update()
    {
        if (pictureInPlace == NumberOfImages)
        {
            StartCoroutine(LoadScene());
            Debug.Log("You Win!");
        }
    }

    IEnumerator LoadScene()
    {
       yield return new WaitForSeconds(1.5f);
        SceneManager.LoadScene(sceneName);

    }
}

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

В конце концов, спасибо за помощь, но я смог найти правильное решение, просто сделайте в первом скрипте (диспетчере):

bool static Done;
void Start()
    {
bool Done = false;
    }
 public void OnEndDrag(PointerEventData eventData)
    {
        float distance = Vector3.Distance(transform.position, pos2.transform.position);
        if (distance < 50)
        {
            transform.position = pos2.transform.position;
            transform.localScale = pos2.transform.localScale;
            canMove = false;
            bool Done = True; 
        }
}

и просто позвоните со второгоСкрипт (YouWin)

public string sceneName;
void Update()
{
if(Youwin.Done)
{
 StartCoroutine(LoadScene());
}
}

IEnumerator LoadScene()
    {

        yield return new WaitForSeconds(0.5f);
        SceneManager.LoadScene(sceneName);

    }

Это правильное решение;

0 голосов
/ 26 февраля 2019

Похоже, вы не ссылались на YouWin в вашем Manager скрипте.Вы должны включить его, добавив его в качестве глобальной переменной public YouWin <variable_name>; или указав пустой объект GameObject и получив компонент YouWin :

public GameObject emptyObject;

emptyObject.GetComponent<YouWin>().picturesInPlace++;
...