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

为什么启动Unity PlayMode后我的玩家对象会自动下落?

问题原因

当前使用的CharacterController组件本身没有内置重力模拟,现有脚本仅实现了水平方向的移动逻辑,缺少垂直方向的重力位移计算,会导致角色碰撞体和地面的贴合不稳定,出现随机穿模下落的情况,也可能是碰撞参数设置不当引发的检测异常。

解决方案

  • 补充重力逻辑到移动脚本中,修改后的完整代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ThirdPersonMovement : MonoBehaviour
{
    public CharacterController controller;
    public float speed = 6f;
    // 重力参数,可根据需求调整大小
    public float gravity = -9.81f;
    // 存储垂直方向速度
    private Vector3 _velocity;

    // Update is called once per frame
    void Update()
    {
        // 重力逻辑处理
        if (controller.isGrounded && _velocity.y < 0)
        {
            // 接地时保留微小向下速度,保证控制器始终贴合地面,避免偶发腾空
            _velocity.y = -2f;
        }

        float horizontal = Input.GetAxisRaw("Horizontal");
        float vertical = Input.GetAxisRaw("Vertical");
        Vector3 direction = new Vector3(horizontal, 0f, vertical).normalized;

        if (direction.magnitude >= 0.1f)
        {
            controller.Move(direction * speed * Time.deltaTime);
        }

        // 应用重力产生的位移
        _velocity.y += gravity * Time.deltaTime;
        controller.Move(_velocity * Time.deltaTime);
    }
}
  • 校验组件参数配置:
    • CharacterController的Skin Width建议设置为碰撞体半径的10%左右,数值过小会提升穿模概率,数值过大会影响移动精度
    • 确认CharacterController的Center参数和立方体模型中心对齐,避免碰撞体偏移导致底部和地面接触不实
    • 地面优先使用Box Collider等简单碰撞体,不要使用非凸的Mesh Collider,避免碰撞检测异常
  • 检查碰撞层规则:确认角色和地面所在的层在物理碰撞矩阵中处于开启状态,不会出现偶发的碰撞检测失效问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:24:03