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

玩家射击时如何为整个玩家角色添加击退冲力效果?

Unity C# 射击反向击退效果实现方案

前提说明

  • 默认适配Unity引擎,核心逻辑适用于所有带物理系统的C#游戏引擎,仅API写法有差异
  • 玩家对象必须已挂载对应维度的刚体组件:3D游戏挂载Rigidbody,2D游戏挂载Rigidbody2D
  • 击退代码直接插入到你现有射击触发逻辑的代码块中即可,不需要单独创建脚本

核心实现代码

3D游戏版本

将以下代码插入到射击触发判定的代码块中(也就是检测到射击按键按下、生成子弹的逻辑之后):

// 获取玩家刚体组件
Rigidbody playerRb = GetComponent<Rigidbody>();
// 计算击退方向:取玩家/枪口朝向的反方向,normalized保证方向数值统一
Vector3 recoilDir = -transform.forward.normalized;
// 施加瞬时冲量,后面的10f为击退力度,可根据手感自由调整
playerRb.AddForce(recoilDir * 10f, ForceMode.Impulse);
  • 若你有单独的枪口子对象,将transform.forward替换为枪口对象.transform.forward,方向会更准确
  • ForceMode.Impulse为瞬时冲量模式,匹配射击瞬间的反馈,无需修改

2D游戏版本

// 获取2D刚体组件
Rigidbody2D playerRb = GetComponent<Rigidbody2D>();
// 计算击退方向,若你的项目玩家朝向用up轴表示,将right替换为up即可
Vector2 recoilDir = -transform.right.normalized;
// 施加瞬时冲量,8f为力度参数,可自行调整
playerRb.AddForce(recoilDir * 8f, ForceMode2D.Impulse);

常见问题调整

  • 击退时玩家出现不受控旋转:打开刚体组件的Freeze Rotation设置,3D游戏勾选全部三个旋转轴,2D游戏勾选Z轴即可
  • 击退力度过轻/过重:直接修改代码中冲量的乘数数值即可
  • 地面状态下击退不明显:可适当提高力度数值,或者调小刚体组件的Drag(阻力)参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:48:00