如何检测游戏对象何时进入另一个游戏对象的区域?

tes*_* tm 1 c# unity-game-engine

我有一个脚本,可以让游戏对象在某个高度移动,例如在 200 处。在地形上,我有另一个游戏对象。我希望当他开始进入另一个游戏对象区域时移动的第一个游戏对象做某事。

喜欢

void OnTriggerEnter(Collider other)
    {
       if (other.gameObject.name == "Base")
      {

      } 
    }
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为变换和“基础”之间没有物理碰撞。变换高度为 200。

我也尝试使用 Raycast hit。在脚本的顶部,我添加了:

Collider col;
Run Code Online (Sandbox Code Playgroud)

然后在更新

    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;
    if (col.Raycast(ray, out hit, 100.0F))
    {
        Debug.Log("Hit !");
    }
Run Code Online (Sandbox Code Playgroud)

但再次转变是在空中。这个想法是在转换开始进入 Base 区域后做一些事情。

Gal*_*dil 5

实现这一目标的简单方法:

  • 制作基础的子游戏对象,只有一个Box Collider组件(isTrigger设置为true
  • 在 y 轴上扩展这个游戏对象的碰撞器(把它想象成一个柱子),像这样: 在此处输入图片说明

  • 使用以下代码将脚本附加到您的移动游戏对象:

    using UnityEngine;
    
    public class CheckBaseCollider : MonoBehaviour {
        public GameObject baseCollider;
    
        private void OnTriggerEnter(Collider other) {
            if (other.gameObject == baseCollider) {
                Debug.Log("Entered");
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

你很高兴去。