谷歌纸板磁石刷新在Unity3d中不起作用

谷歌纸板磁石刷新在Unity3d中不起作用,unity3d,Unity3d,我正在使用谷歌硬纸板做一个Unity项目,基于我的设计,硬纸板磁铁使球跳跃,它第一次工作,但每当游戏重新启动时,使用Application.LoadLevel,球就不再跳跃;这只是小故障。我我已经用一个测试应用程序测试了这个脚本Magnetsensor脚本,在这个测试应用程序中,每当拉动磁铁时,文本都会改变颜色,并且一直工作。这是我的控球脚本我称之为磁铁感应的脚本: #pragma strict var rotationSpeed = 100; var jumpHeight = 8; var H

我正在使用谷歌硬纸板做一个Unity项目,基于我的设计,硬纸板磁铁使球跳跃,它第一次工作,但每当游戏重新启动时,使用Application.LoadLevel,球就不再跳跃;这只是小故障。我我已经用一个测试应用程序测试了这个脚本Magnetsensor脚本,在这个测试应用程序中,每当拉动磁铁时,文本都会改变颜色,并且一直工作。这是我的控球脚本我称之为磁铁感应的脚本:

#pragma strict
var rotationSpeed = 100;
var jumpHeight = 8;
var Hit01 : AudioClip;
var Hit02 : AudioClip;
var Hit03 : AudioClip;
var distToGround : float;

function Start () {
    // Getting the distance from the center to the ground.
    distToGround = collider.bounds.extents.y;
}

function Update ()
{
    //Handle ball rotation.
    var rotation : float = Input.GetAxis(“Horizontal”) * rotationSpeed;
    rotation *= Time.deltaTime;
    rigidbody.AddRelativeTorque (Vector3.back * rotation);
    MagnetSensor.OnMagnetPull += JumpOnMagnet;    //important
}

function JumpOnMagnet () {   //important
    rigidbody.velocity.y = jumpHeight;    //important
}    //important

function IsGrounded () : boolean { //Check if we are on the ground. Return true if we are else return null.
    return Physics.Raycast(transform.position, -Vector3.up, distToGround + 0.1);
}

function OnCollisionEnter () {
    var theHit = Random.Range(0, 3);
    if (theHit == 0)
    {
        audio.clip = Hit01;
    }
    else if (theHit == 1)
    {
        audio.clip = Hit02;
    }
    else {
        audio.clip = Hit03;
    }
    audio.pitch = Random.Range (0.9,1.1);
    audio.Play();
}
以下是我的重新启动脚本:

#pragma strict
var maxFallDistance = -10;
private var isRestarting = false;
var level : String;
var GameOverSound : AudioClip;

function Update ()
{
    if (transform.position.y <= maxFallDistance)
    {
        if (isRestarting == false)
        {
            RestartLevel();
        }
    }
}

function RestartLevel () {
    isRestarting = true;
    audio.pitch = 1;
    audio.clip = GameOverSound;
    audio.Play();
    yield WaitForSeconds (audio.clip.length);
    Application.LoadLevel(level);
}
请让我知道可能出现的问题以及我如何解决这些问题。另外,如果您能为我指出任何有帮助的网站或资源,我将不胜感激。

不要做MagnetSensor.OnMagnetPull+=JumpOnMagnet;在更新函数中。在Start中调用它,因此只添加一次


此外,还应添加OnDestroy函数并调用MagnetSensor.OnMagnetPull-=JumpOnMagnet;在其中。

请正确格式化您的代码,并至少说明一个问题。我也是一名新手,所以您能告诉我为什么我应该使用OnDestroy函数。MagnetSensor.OnMagnetPull事件是静态的,因此它可以跨级别加载保存。但是当加载新级别时,当前级别的游戏对象将被销毁并释放。这将在静态事件中留下对已销毁对象的引用。OnDestroy方法允许您在对象被销毁之前清除对对象的此类引用。