我是移动开发的初学者;当我开始一切都很好时,我的鸟可能会发射没有问题,但添加后:
private void Update()
{
if (transform.position.y > 10 || transform.position.y < -10
|| transform.position.x > 10 || transform.position.x < -10)
{
string currentSceneName = SceneManager.GetActiveScene().name;
SceneManager.LoadScene(currentSceneName);
}
}
要在 x 和 y 超过 10 或 - 10 时重新加载场景,示例场景开始显示 SampleScene(未加载)并且播放场景被冻结,这是图像 Playground link to code
当我删除更新功能时,它运行良好。
这是整个脚本:
using UnityEngine;
using UnityEngine.SceneManagement;
public class Bird : MonoBehaviour
{
Vector3 _initialPosition;
[SerializeField]private float _launchPower = 500;
private void Awake()
{
_initialPosition = transform.position;
}
private void Update()
{
if (transform.position.y > 10 || transform.position.y < -10
|| transform.position.x > 10 || transform.position.x < -10)
{
string currentSceneName = SceneManager.GetActiveScene().name;
SceneManager.LoadScene(currentSceneName);
}
}
private void OnMouseDown()
{
GetComponent<SpriteRenderer>().color = Color.red;
}
private void OnMouseUp()
{
GetComponent<SpriteRenderer>().color = Color.white;
Vector2 directionToInitialPosition = _initialPosition - transform.position;
GetComponent<Rigidbody2D>().AddForce(directionToInitialPosition * _launchPower);
GetComponent<Rigidbody2D>().gravityScale = 1;
}
private void OnMouseDrag()
{
Vector3 newPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
transform.position = new Vector3(newPosition.x, newPosition.y);
}
}
答案 0 :(得分:0)
诚然,我并不完全确定这是否是正确的修复,我认为你所做的应该可以工作,只要鸟没有在这些参数之外重新启动。
但是,正如 BugFinder 所说,也许最好不要尝试在 Update() 中重新加载场景。因此,您可以尝试告诉另一个“SceneManager”对象重新启动场景,然后禁用您的 Bird 脚本,这样它就不会在已经尝试加载场景时尝试加载。
Bird
{
Update()
{
if(BirdOutOfRange())
{
//might be better to broadcast this as event and
//have MySceneManager listen for it
MySceneManager.ReloadScene(); //may be better practice, but also may be unnecessary
//Disable Bird to stop any future attempts to reload scene
this.enabled = false;