Unity子对象有时会跳转到vector3(0,0,0)

时间:2015-07-02 23:47:37

标签: unity3d unity3d-2dtools

Hy Guys! 我有一个非常讨厌的bug,我无法摆脱它。 情况是,我有一个父级,附加了以下脚本,以及一个触发器box2d对撞机。它有一个孩子,有一个rigidbody2d(运动学,重力= 0,冻结位置x和旋转z),一个精灵渲染器和一个多边形对撞机(有4个边缘)。 我的问题是,当场景被加载时,有时候我的孩子会对象(总是随机的多少和对象)跳转到transform.position 0,0,0。

我链接脚本,附加到父

的内容
using UnityEngine;
using System.Collections;

public class FallingSpikeHazard : MonoBehaviour
{
    public GameObject spike;
    private Rigidbody2D spikeRigidbody;
    [SerializeField]
    private Vector3 startPosition;

    void Awake ()
    {       
        startPosition = spike.transform.localPosition; 
    }

    void Start ()
    {
        spikeRigidbody = spike.GetComponent<Rigidbody2D> ();

        Helper.JustReset += ResetMe;
        Invoke ("CheckPosition", Time.deltaTime);
    }

    void CheckPosition ()
    {
        if (spike.transform.localPosition != startPosition) {
            Debug.LogError ("t1" + spike.transform.localPosition);
            spike.transform.localPosition = startPosition;
            Debug.LogError ("t2" + spike.transform.localPosition);
        }
    }

    void OnDestroy ()
    {

        Helper.JustReset -= ResetMe;
    }

    void ResetMe ()
    {
        spikeRigidbody.gravityScale = 0;
        spikeRigidbody.isKinematic = true;
        if (startPosition != Vector3.zero) {
            spike.transform.localPosition = startPosition;
        }
    }

    void OnTriggerEnter2D (Collider2D other)
    {
        if (other.gameObject.tag.Equals ("Player")) {
            spikeRigidbody.isKinematic = false;
            spikeRigidbody.gravityScale = 1;
        }
    }
}

事件不会被调用,另一方面,如果我禁用脚本,它会继续发生。没有任何参考这些GameObjects。我没有动画或附加动画师。

什么可能导致我的问题?

谢谢你:)

1 个答案:

答案 0 :(得分:0)

你需要在父GameObject中有一个Rigidbody2D组件才能调用OnTriggerEnter函数。