Unity C#-当同时具有OnTriggerExit和OnTriggerEnter时,只会调用OnTriggerExit

时间:2019-11-24 20:59:12

标签: c# unity3d game-development

好的,所以我看不出我的问题在哪里。我在移动平台上使用了OnTriggerEnter。它具有刚体部件,并且在平台和播放器上均将盒碰撞器设置为isTrigger,但是由于某些原因,当播放器触发我的平台时,只会调用OnTriggerExit。我的播放器被标记为团结的播放器...我不知道该怎么办。

代码:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;



public class Moving_Platform : MonoBehaviour
{
    [SerializeField]
    private float _speed = 1.0f;

    [SerializeField]
    private Transform _A, _B;

    private bool _direction = false;

    void FixedUpdate()
    {
        if(transform.position==_A.position)
        {
            _direction = false;
        }
        else if(transform.position== _B.position)
        {
            _direction = true;
        }

        if (_direction == false)
        {
            transform.position = Vector3.MoveTowards(transform.position, _B.position, _speed * Time.deltaTime);
        }

        if(_direction==true)
        {
            transform.position = Vector3.MoveTowards(transform.position, _A.position, _speed * Time.deltaTime);
        }
    }

    private void OnTriggerEnter(Collider other)
    {

        if (other.tag == "Player")
        {
           other.transform.parent = this.transform;
        }
    }

    private void OnTriggerExit(Collider other)
    {
        Debug.Log("OMFG");
        if (other.tag == "Player")
        {
            Debug.Log("But why!");
            other.transform.parent = null;
        }
    }


}

所有检查员

2 个答案:

答案 0 :(得分:1)

似乎更新到新版本(2020.x)可以解决问题。 感谢您的尝试。

答案 1 :(得分:0)

BoxCollider在Moving_Platform GameObject中添加了两次,其中一个具有“启用了触发器”的值,而另一个则没有。为什么会这样呢? 为了进行更好的测试,您可以在if语句之外添加Debug.Log(other.name)来查看发生的情况。