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

Unity3D迷宫场景中如何解决玩家斜向移动穿墙问题?

Unity斜向移动穿墙问题修复方案

核心问题分析

直接用Rigidbody.MovePosition()强制位移会绕过物理引擎的连续碰撞检测,斜向移动时玩家碰撞器容易穿过墙体衔接处的微小缝隙;后续添加的碰撞回退逻辑因OnCollisionEnter重复触发,导致位置异常。


1. 改用物理引擎驱动移动(替代直接位移)

用Rigidbody.velocity控制移动,让物理引擎自动处理碰撞检测,彻底避免穿墙。同时对移动方向归一化,保证斜向与单方向移动速度一致:

public float speed = 10f;
private Rigidbody rb;

void Awake()
{
    rb = GetComponent<Rigidbody>();
    rb.freezeRotation = true; // 锁定旋转,防止移动时角色翻滚
}

void FixedUpdate()
{
    MovementLogic();
}

private void MovementLogic()
{
    float horizontal = Input.GetAxis("Horizontal");
    float vertical = Input.GetAxis("Vertical");
    
    // 构建移动方向并归一化,避免斜向移动速度超标
    Vector3 moveDir = new Vector3(horizontal, 0f, vertical).normalized;
    
    // 交给物理引擎处理移动与碰撞
    rb.velocity = moveDir * speed;
}

2. 启用连续碰撞检测(CCD)

若仍存在穿墙情况,给玩家的Rigidbody做以下设置:

  • 将Collision Detection设为Continuous Dynamic
  • 确保墙体的Collider为凸形(BoxCollider默认满足,MeshCollider需勾选Convex)

3. 移除错误的碰撞回退代码

直接删除OnCollisionEnter中的回退逻辑,物理引擎会自动阻挡角色穿过墙体,无需手动回退。

4. 优化墙体碰撞器布局

  • 检查迷宫墙体板块的Collider,确保相邻墙体之间无空隙,Collider紧密贴合
  • 避免随意放大Collider,使用与墙体模型匹配的精确Collider尺寸

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:45:02