一颗小菜菜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日

悬赏问题

  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?
  • ¥15 关于#sql#的问题,请各位专家解答!
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111