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

Unity跳跃跑酷游戏:如何检测玩家是否接触地形?

Unity CharacterController 地面检测解决方案

方法一:使用CharacterController自带的isGrounded属性

CharacterController组件内置了专门的地面检测属性isGrounded,这是官方推荐的最简方案,无需额外添加Rigidbody或调整碰撞体。

示例代码:

using UnityEngine;

public class PlayerGroundCheck : MonoBehaviour
{
    private CharacterController controller;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        if (controller.isGrounded)
        {
            // 这里写接触地面后的操作,比如允许跳跃、播放落地动画等
            Debug.Log("玩家已接触地面");
        }
    }
}

注意:可以调整CharacterController的Skin Width参数(建议设为0.01左右),优化isGrounded的检测精度,避免延迟或误判。

方法二:添加Rigidbody配合碰撞检测

如果需要精准检测与地形的碰撞事件,可按以下步骤配置:

  1. 给玩家对象添加Rigidbody组件,在Inspector面板勾选Is Kinematic(启用运动学)——这样既不会干扰CharacterController的移动逻辑,又能触发碰撞事件。
  2. 确认地形的Terrain Collider处于启用状态,且标签已设为Terrain。
  3. 编写碰撞检测代码:
using UnityEngine;

public class PlayerCollisionCheck : MonoBehaviour
{
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag("Terrain"))
        {
            // 执行接触地形后的操作
            Debug.Log("玩家接触到地形地面");
        }
    }

    // 可选:用OnCollisionStay持续检测接触状态
    private void OnCollisionStay(Collision collision)
    {
        if (collision.gameObject.CompareTag("Terrain"))
        {
            // 持续接触时的操作
        }
    }
}

注意:如果不勾选Is Kinematic,Rigidbody的物理效果会和CharacterController的移动逻辑冲突,导致角色不受控制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:18:10