You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按键时关闭最近Border标签对象的2D Box Collider并5秒后恢复

实现方案:按键控制最近Border对象的碰撞器开关

操作步骤

  1. 在Unity编辑器中右键创建C#脚本,命名为ToggleNearestBorderCollider
  2. 打开脚本,替换成下面的代码
  3. 将脚本拖到你的玩家控制器对象上
  4. 运行游戏,按下默认的E键即可触发效果,也可以在Inspector面板修改触发按键

完整代码(带详细注释)

using UnityEngine;
using System.Collections;

public class ToggleNearestBorderCollider : MonoBehaviour
{
    // 在Inspector面板可自定义触发按键
    public KeyCode triggerKey = KeyCode.E;
    // 碰撞器重新开启的延迟时间(秒)
    public float delayTime = 5f;

    void Update()
    {
        // 检测按键按下事件
        if (Input.GetKeyDown(triggerKey))
        {
            // 获取所有带"Border"标签的游戏对象
            GameObject[] borderObjects = GameObject.FindGameObjectsWithTag("Border");
            
            // 如果没有找到任何Border对象,打印警告
            if (borderObjects.Length == 0)
            {
                Debug.LogWarning("场景中没有带Border标签的对象!");
                return;
            }

            GameObject nearestBorder = null;
            float shortestDistance = Mathf.Infinity;

            // 遍历所有Border对象,找出距离玩家最近的那个
            foreach (GameObject border in borderObjects)
            {
                float currentDistance = Vector3.Distance(transform.position, border.transform.position);
                
                if (currentDistance < shortestDistance)
                {
                    shortestDistance = currentDistance;
                    nearestBorder = border;
                }
            }

            // 找到最近对象后,处理碰撞器开关
            if (nearestBorder != null)
            {
                BoxCollider borderCollider = nearestBorder.GetComponent<BoxCollider>();
                
                if (borderCollider != null)
                {
                    // 关闭碰撞器
                    borderCollider.enabled = false;
                    // 启动延迟开启协程
                    StartCoroutine(TurnOnColliderAfterDelay(borderCollider));
                }
                else
                {
                    Debug.LogWarning($"对象 {nearestBorder.name} 没有挂载BoxCollider组件!");
                }
            }
        }
    }

    // 协程:延迟指定时间后重新开启碰撞器
    IEnumerator TurnOnColliderAfterDelay(BoxCollider targetCollider)
    {
        // 等待设置的延迟时间
        yield return new WaitForSeconds(delayTime);
        // 重新开启碰撞器
        targetCollider.enabled = true;
    }
}

注意事项

  • 确保所有带“Border”标签的对象都已添加BoxCollider组件,否则会触发警告
  • 触发按键、延迟时间都可以在Inspector面板直接修改,无需改动代码
  • 每次按键都会重新查找所有Border对象,动态生成的Border也能被识别

内容的提问来源于stack exchange,提问作者Max Herczeg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:25:13