当前位置: 首页 > 知识库问答 >
问题:

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

薄龙光
2023-03-14

我在为孩子们做一个教育游戏。。但我在场景结束时停了下来,我无法编写代码来开始新场景。。在第一个脚本中,当玩游戏时,场景直到最后一个场景才停止。

YouWin.pictureInPlace++;

我搜索了很多,没有找到我的问题,所以我咨询了你。使用按钮转到下一个场景更容易,但我更喜欢自动执行。我认为这项任务可以通过布尔值来完成,但它需要引用游戏对象。。和两幅图像上的脚本。第一个脚本(管理器)在画布上放置了四个图像。。我放在空游戏对象上的第二个(YouWin)。。谢谢你的帮助

第一个脚本(经理)

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个答案

华凡
2023-03-14

毕竟,感谢您的帮助,但我在第一个脚本中找到了正确的解决方案(经理):

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

    }

这是正确的解决方案;

贺刚毅
2023-03-14

看起来您没有在Manager脚本中引用YouWin。您应该通过将其添加为全局变量public YouWin来包含它

public GameObject emptyObject;

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

 类似资料:
  • 接口说明 场景分公开私有,私有的场景只能自己查看或者团队,公开的场景可以对所有人查看,包括游客(没有登录的用户),此接口是为了分享场景给其他人查看,无需进行登录操作就可以查看到场景的相关信息 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/scene/1.0.0/getPublic 是否需要登录 否 请求字段说明 参数 类

  • 接口说明 操作场景产生的信息json,需要提交到服务端进行保存,以便下次查看场景的时候,可以正常访问到对该场景操作过得信息 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/scene/1.0.0/upload 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 id string form 是 场景ID

  • 我尝试在cucumber中执行特性后执行一个脚本来清理数据库。我使用前后挂钩的方式如下: 对于before,我可以避免使用静态变量在每个场景之前调用脚本。但不知道如何为后钩子做: 有没有办法捕获最后一个方案是否已经执行,并且仅在满足该条件时才触发 clearData()?有没有更优雅的方法?

  • 一个任务需要分步骤分阶段完成时,需要创建子任务。所有子任务完成,任务才能置为已完成

  • 我写信是为了获取有关JavaFX的一些信息。我使用SceneBuilder设计了一个应用程序,它有一个主要场景,由几个文本字段和用于浏览文件的按钮组成。程序运行后还有一个用于输出的文本区域。我在控制器的初始化方法中添加了更改侦听器,以便在更新输出文本区域时修改日志文件。 最初,我使用输出文本区域来显示日志文件,对其进行了测试。一旦我从主文件菜单中选择了“查看日志”菜单项,我就能够在这个输出文本区域

  • 本文向大家介绍Dubbo的主要应用场景?相关面试题,主要包含被问及Dubbo的主要应用场景?时的应答技巧和注意事项,需要的朋友参考一下 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并