一颗小菜菜lan 2024-05-03 13:42 采纳率: 11.1%
浏览 3

unity射击游戏设计

img

img


以上是player的移动和跳跃脚本,但是为什么player从高处往低处走的时候,不会受到重力影响掉下来?
像这样浮在半空中,但是按一下跳跃又会掉下来

img


player的修改面板如下

img

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-03 13:42
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在Unity中制作一款第一人称射击(FPS)游戏,并且遇到了一些关于角色移动和重力的问题。在你的代码片段中,我注意到Update()方法中的部分逻辑可能存在问题,这可能导致玩家角色在下降时不受重力影响。

    首先,让我们检查一下Update()方法中的重力应用部分。你需要确保当角色不在地面上时,正确地应用重力。下面是修复后的代码段,我将为你提供完整的修正过的Update()方法:

    private void Update()
    {
        // ...其他代码...
    
        // 应用重力,只有在角色不是静止状态且不在地面上时
        if (!isOnGround && !characterController.isGrounded)
        {
            jumpSpeed += Physics.gravity.y * Time.deltaTime;
        }
    
        // 计算垂直位移
        float verticalMovement = jumpSpeed * Time.deltaTime;
    
        // 更新跳跃速度
        jumpSpeed = Mathf.Max(jumpSpeed, -5);
    
        // 创建一个表示跳跃的矢量
        Vector3 jumpV3 = new Vector3(0, verticalMovement, 0);
    
        // 使用CharacterController移动角色
        characterController.Move(jumpV3);
    
        // ...其他代码...
    }
    

    另外,确保你的CharacterController组件已连接到你的玩家对象上,并且PlayerController脚本也附加到了同一对象上。如果你已经确认了这些设置,那么可能是由于其他原因导致的角色行为异常。在这种情况下,可以尝试检查以下几点:

    1. 确保CharacterController组件的“Is Kinematic”属性未被勾选。
    2. 检查canJumpLayers是否包含了地面层(通常为"Ground"或自定义名称),以便正确检测到角色是否着陆。
    3. 如果你的场景中存在地形(Terrain),确保它有合适的碰撞体,否则CharacterController可能无法正确检测地面接触。

    如果你仍然遇到问题,可能需要查看整个项目的设置、层级结构以及任何可能影响角色移动的其他脚本。如果上述建议没有解决问题,你可能需要提供更多的上下文信息,例如详细的项目结构和更多相关的代码,以便我能更深入地分析和解决你的问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月3日