Unity中实现平台跳跃功能(不使用物理系统)

本文详细描述了如何在Unity中不使用物理系统实现平台跳跃功能,包括动画控制器的设置、角色移动和跳跃逻辑控制,以及如何处理移动、旋转和碰撞检测等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 本文仅供本人学习自用)

                                                                        1

【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 4.动画控制器制作_哔哩哔哩_bilibili

移动层的基本逻辑 ↓

我们在动画中再建一个层,并默认连一个空状态。这样底层权重为1的跳跃层默认不会影响我们的移动层。
 在动画资源中,可以修改动画片段,只保留某一部分。
跳跃逻辑为上升-滞空-下落,所以只截取了完整动画片段中的一小部分。

null转跳跃,不需要等动画播放完,且过渡时间减少为0.1,用一个bool值isJump==true作为切换条件
跳跃转滞空,达到最高点,其实也就是跳跃动画播放完,所以不需要取消勾选,然后跳跃自动转滞空(后续写代码控制)
滞空转下落,则bool值 isFall==true来作为切换条件,滞空时间未知,所以不需要等待播放完毕,取消勾选。
下落转null,即isFall==fasle,且isJump==false时。经过测试,不需要等待下落动画播放完,直接切换回null。所以取消勾选

另外,从高台跳下时,我们应该直接下落。所以从null →下落。条件是isFall==true;当接触到地面时,又设回来,isFall==false。
当在下落过程中二段跳时,也需要再转回跳跃状态。连线无需过渡,且条件应为 isJump==true 和 isFall==false。

跳跃层的基本逻辑 ↓(其中JumpLayer层为本层,在RunLayer启用时,若启动了本层,会直接覆盖上层的动画。)

                                                                         2

【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 5.角色移动逻辑_哔哩哔哩_bilibili

代码控制:  float h 应作为成员变量,避免在Update当中重复创建。

为-1时,即向左,我们让人物的旋转参数=(0,-90,0)。如果不确定,可以在游戏场景中实际测试一下。

顺带一提,transform.rotation是一个四元数,所有要先转换。

为0时则不会发生改变,仍然保持之前的朝向。

而移动时,不论朝向如何,玩家永远只是往自己的正前方进行移动。如果无关左右判断,仅需要判断是否有所移动即可。在我们设置条件时,不要使用额外的判断条件,而是使用移动参数本身。

当没有移动时,参数为0;当有移动时,参数不为0。

如果输入不是零,则移动,是零,则不移动。

使用#region和#endregion

让代码便于整理和阅读。后续在这里面添加逻辑即可。

                                                                         3

【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 6.角色跳跃逻辑_哔哩哔哩_bilibili

目前为止,用到的变量。 随着时间的增加,当前速度会越来越小,直到为负值时下落。

在单次按下空格键时,设置isJump,而且给当前速度赋值,它为初始值,也就是最大的时候。

当动画状态为jump时(在播放跳跃动画时),角色往上移动。其中当前速度是要不断减小的,这样当速度小于0时就进入了下落状态。

如果我们触碰到地面,他就会停下来。

判断地面的条件是,当前平台的Y值,与我们unity的碰撞器+标签判断法不太相同。

public float nowPlatformY;(不写默认=0)

直接改transform。position。y是改不了的,所以需要中介值。

这一步是为了避免落地时“落到地里面”,把它的位置修正。这个平台Y值后期是会改变的。

还是同一条原则,不要使用过多的if判断,而是直接设置他的值,并且让他与条件自身相关,可以让代码耦合度大大降低,而且准确。

关于二段跳:使用一个int来记数即可。  跳一次就index++,并且只有按下空格且index!=2时才能执行跳跃逻辑,落地时index重新=0。

                                                                            4

【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 7.影子逻辑相关_哔哩哔哩_bilibili

                                                                             5

平台逻辑,当玩家x值在平台的左右坐标之间,并且y轴大于等于平台的y轴(高度)时,就认为玩家是可以落到这个平台上面的。

使用Gizmos类,OnDrawGizmos 函数。可以在编辑器模式下绘制图形,达到数据可视化。

【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 10.平台数据类_哔哩哔哩_bilibili调用里面的绘制方法,需要两个参数,起始点和结束点。

因为两个都是Vector3类型,所以不能直接使用宽高变量(float

有的平台有影子,有的平台可以主动跳下,脚本定义一个公开的bool,在外界根据不同的平台去勾上就好了。

Unity实现角色跳跃通常涉及以下几个步骤: 1. **添加刚体组件**:确保你的角色对象上有一个Rigidbody组件,这是实现跳跃物理效果的关键。 2. **编写脚本**:创建一个C#脚本来控制角色的跳跃行为。 3. **检测输入**:在脚本中检测玩家的输入(例如按下空格键)。 4. **应用力**:使用Rigidbody组件的`AddForce`方法来模拟跳跃。 以下是一个简单的示例代码,展示了如何在Unity实现角色跳跃: ```csharp using UnityEngine; public class PlayerController : MonoBehaviour { public float jumpForce = 5f; // 跳跃力度 private Rigidbody rb; private bool isGrounded; void Start() { rb = GetComponent<Rigidbody>(); } void Update() { // 检测是否在地面上 if (Physics.Raycast(transform.position, Vector3.down, 1.1f)) { isGrounded = true; } else { isGrounded = false; } // 检测跳跃输入 if (Input.GetKeyDown(KeyCode.Space) && isGrounded) { rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse); } } } ``` ### 步骤说明: 1. **添加Rigidbody组件**:确保你的角色对象上有一个Rigidbody组件。你可以在Unity编辑器中选中角色对象,然后在Inspector窗口中点击`Add Component`,搜索`Rigidbody`并添加。 2. **创建脚本**:在Unity编辑器中,右键点击`Project`窗口,选择`Create -> C# Script`,命名为`PlayerController`,然后双击打开脚本编辑器。 3. **编写代码**:将上述代码复制粘贴到脚本中,并保存。 4. **应用脚本**:将`PlayerController`脚本拖到你的角色对象上。 5. **调整参数**:根据需要调整`jumpForce`的值,以获得合适的跳跃力度。 ### 代码说明: - `jumpForce`:定义跳跃的力度。 - `rb`:引用角色的Rigidbody组件。 - `isGrounded`:标记角色是否在地面上。 - `Update()`:每帧检测输入并应用跳跃力。 通过以上步骤,你就可以在Unity实现基本的角色跳跃功能
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值