Unity3D场景无法正常工作并且在重新加载后滞后

时间:2015-05-19 10:57:06

标签: unity3d reload lag scene die

我看过互联网,但我无法找到问题的解决方案。我正在尝试创建一个游戏,它有3个场景:游戏开始,主要游戏和游戏结束。

问题在于,当尝试从其他场景加载主级别时,它不会执行它必须做的事情(例如跳转)并且场景本身是滞后的。当我尝试仅加载主场景时,它可以正常工作,但是在角色死亡并且场景重新加载后,它又开始滞后,我无法跳跃或做任何应该做的事情。

关于问题可能是什么的任何想法?



 using UnityEngine;
	using System;

public class Player : MonoBehaviour
{
	// The force which is added when the player jumps
	// This can be changed in the Inspector window
	public Vector2 jumpForce = new Vector2(0, 300);
	private bool shouldJump = true;
	// Update is called once per frame
	private float jumpThreshold = 0.5f;
	private float previousJumpTime;


	void FixedUpdate ()
	{
		// Jump
		float mc = MicControl.loudness;

		//Debug.Log (mc);
		if (mc>1.3f && shouldJump)
		{
			shouldJump = false;
			previousJumpTime = Time.time;
			GetComponent<Rigidbody2D>().velocity = Vector2.zero;
			GetComponent<Rigidbody2D>().AddForce(jumpForce);
		}

		if (!shouldJump) 
		{
			if(Time.time-previousJumpTime>jumpThreshold)
			{
				shouldJump = true;
			}
		}

		// Die by being off screen
		Vector2 screenPosition = Camera.main.WorldToScreenPoint(transform.position);
		if (screenPosition.y > Screen.height || screenPosition.y < 0)
		{
			Die();


		}
	}

	// Die by collision
	void OnCollisionEnter2D(Collision2D other)
	{
		Die();


	}
	
	void Die()
	{

		Application.LoadLevel ("main");

}
}
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:0)

你说你的等级叫做Main,但是在你加载“main”的代码中,我不确定这是不是问题,但是你似乎正在正确加载等级,所以检查是否为main或Main确切的级别名称。

此外,在编译时,请确保已检查所有级别

答案 1 :(得分:0)

使用提供的数据无法说出导致性能低下的原因,但我建议您使用 Profiler 工具(可以在Unity 5的个人版本中找到)并找出哪些脚本和功能存在问题

另外,尽量避免在Update / FixedUpdate / LateUpdate中调用GetComponent<Rigidbody2D>()并缓存此组件。

答案 2 :(得分:0)

我是Utamaru说的第二个。

    Rigidbody2D myRigidbody2d;

    void Start ()
    {
    myRigidbody2d = GetComponent<Rigidbody2D>(); //Do this once
    }

在固定更新中,您可以执行以下操作:

void FixedUpdate ()
    {
        // Jump
        float mc = MicControl.loudness;

        //Debug.Log (mc);
        if (mc>1.3f && shouldJump)
        {
            shouldJump = false;
            previousJumpTime = Time.time;
            myRigidbody2d.velocity = Vector2.zero;
            myRigidbody2d.AddForce(jumpForce);
        }

        if (!shouldJump) 
        {
            if(Time.time-previousJumpTime>jumpThreshold)
            {
                shouldJump = true;
            }
        }

        // Die by being off screen
        Vector2 screenPosition = Camera.main.WorldToScreenPoint(transform.position);
        if (screenPosition.y > Screen.height || screenPosition.y < 0)
        {
            Die();
        }
    }

我无法看到你的其他代码,所以我不确定这是问题,但试一试。