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

Unity C#开发捉人游戏碰撞检测问题及Tag Manager实现问询

捉人(Tag)游戏判定逻辑优化方案

全局状态管理(TagManager)实现

做成单例类统一管理全局游戏状态,避免分散在各个玩家脚本的逻辑冲突:

using UnityEngine;

public class TagManager : MonoBehaviour
{
    public static TagManager Instance { get; private set; }
    public GameObject currentTagger;
    public int tagSwitchCount; // 你需要的计数器可以直接放在这里

    private void Awake()
    {
        if (Instance != null && Instance != this) Destroy(gameObject);
        else Instance = this;
    }

    public void OnTagTrigger(GameObject newTagger)
    {
        if (newTagger == currentTagger) return;
        currentTagger = newTagger;
        tagSwitchCount++;
        // 可在此处添加音效、UI更新等全局触发逻辑
    }
}

玩家通用碰撞逻辑

所有玩家挂载同一份脚本,不管是主动碰撞还是被碰撞都能正常触发判定:

using UnityEngine;

public class PlayerTagHandler : MonoBehaviour
{
    public bool isCurrentlyTagger;

    private void OnCollisionEnter(Collision collision)
    {
        // 仅处理和其他玩家的碰撞
        if (!collision.gameObject.TryGetComponent(out PlayerTagHandler otherPlayer)) return;
        
        // 当前对象是抓人者时,触发身份切换
        if (isCurrentlyTagger)
        {
            TagManager.Instance.OnTagTrigger(otherPlayer.gameObject);
            isCurrentlyTagger = false;
            otherPlayer.isCurrentlyTagger = true;
        }
    }
}

配置注意事项

  • 场景中新建空对象挂载TagManager脚本,初始设置好首个抓人者的currentTagger引用
  • 所有玩家对象必须挂载碰撞体(Collider)以及至少一方挂载非运动学(Non-Kinematic)刚体(Rigidbody),保证OnCollisionEnter正常触发
  • 初始抓人者的PlayerTagHandler脚本中isCurrentlyTagger勾选为true
  • 如果使用触发器判定,将碰撞体勾选Is Trigger,把OnCollisionEnter替换为OnTriggerEnter即可,逻辑无需修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:39:02