结束场景后需要开始新场景

时间:2019-02-25 21:52:52

标签: unity3d boolean 2d unityscript scene2d

我正在为孩子们做一个教育游戏。 但是我停在了场景的尽头 我无法编写代码来开始新的场景。 在第一个脚本中 在玩游戏时,场景直到最后一个场景都不会停止。

  
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 :(得分:1)

您似乎没有在 Manager 脚本中引用 YouWin 。您应该通过将其添加为全局变量public YouWin <variable_name>;或通过引用空的GameObject并获取 YouWin 组件来包含它:

public GameObject emptyObject;

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

答案 1 :(得分:0)

毕竟感谢您的帮助,但我能够找到正确的解决方案 只需输入第一个脚本(管理器)即可:

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

    }

这是正确的解决方案;