场景结束后需要开始新的场景
After ending the scene need to start new scene
我正在为孩子们做一个教育游戏..
但我停在了场景的尽头
我无法编写代码来开始新场景..
在第一个脚本中
玩游戏的时候画面一直到最后一幕才停止
YouWin.pictureInPlace++;
我找了很多都没有找到我的问题,所以才咨询你。做一个按钮去下一个场景更容易,但我更喜欢自动做
我认为这个任务可以通过布尔值来完成,但它需要参考游戏 object.. 和 2 个图像上的脚本。
第一个脚本(经理)在 Canvas 放了四张图片。
第二个 (YouWin) 我放上空的 GameObject..
感谢帮助
第一个脚本(Manger)
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);
}
}
您似乎没有在 Manager 脚本中引用 YouWin。您应该通过将其添加为全局变量 public YouWin <variable_name>;
或通过引用您的空 GameObject 并获取 YouWin 组件来包含它:
public GameObject emptyObject;
emptyObject.GetComponent<YouWin>().picturesInPlace++;
毕竟感谢你帮助我,但我能够找到正确的解决方案
只需在第一个脚本(经理)中制作:
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);
}
这是正确的解决方案;
我正在为孩子们做一个教育游戏.. 但我停在了场景的尽头 我无法编写代码来开始新场景.. 在第一个脚本中 玩游戏的时候画面一直到最后一幕才停止
YouWin.pictureInPlace++;
我找了很多都没有找到我的问题,所以才咨询你。做一个按钮去下一个场景更容易,但我更喜欢自动做 我认为这个任务可以通过布尔值来完成,但它需要参考游戏 object.. 和 2 个图像上的脚本。 第一个脚本(经理)在 Canvas 放了四张图片。 第二个 (YouWin) 我放上空的 GameObject.. 感谢帮助
第一个脚本(Manger)
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);
}
}
您似乎没有在 Manager 脚本中引用 YouWin。您应该通过将其添加为全局变量 public YouWin <variable_name>;
或通过引用您的空 GameObject 并获取 YouWin 组件来包含它:
public GameObject emptyObject;
emptyObject.GetComponent<YouWin>().picturesInPlace++;
毕竟感谢你帮助我,但我能够找到正确的解决方案 只需在第一个脚本(经理)中制作:
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);
}
这是正确的解决方案;