首页 > 其他分享 >Unity2D横版游戏之平台跳跃效果

Unity2D横版游戏之平台跳跃效果

时间:2024-05-01 17:12:53浏览次数:16  
标签:Unity2D 平台 碰撞 玩家 colliderMask platformEffector 横版 跳跃 图层

Unity2D横版游戏之平台跳跃效果

简单介绍

平台跳跃效果。玩家允许在平台下方跳跃到平台上方,并且可以在平台上方站立,同时玩家在平台上方允许通过下跳操作到达平台下方。

实现步骤

(一)将玩家的图片设置为 Player、将平台的图层设置为 Platform。

(二)为平台游戏对象创建 XXXCollider2D 组件,并勾选 Used By Effector。

(三)为平台游戏对象创建 Rigidbody2D 组件,设置 BodyType 为 Static。

(四)为平台游戏对象创建 PlatformEffector2D 组件。

(五)编写脚本,实现思路如下:当玩家进行下跳操作时修改 PlatformEffector2D 组件的 colliderMask 的值,禁用平台对玩家的碰撞图层,当玩家下跳操作完成时再恢复平台对玩家的碰撞图层。通过在玩家头顶发出射线并检测是否与平台图层发生碰撞,如果碰撞则说明下跳操作完成。参考代码如下。

public class DemoFSMState : BaseFSMState
{
    private Collider2D _platformCollider;
    private PlatformEffector2D _platformEffector;

    public DemoFSMState(FiniteStateMachine fsm, DemoParameter parameter) : base(fsm, parameter)
    {
    }

    public override void OnEnter()
    {
        _platformCollider = Parameter.platformCollider;
        _platformEffector = Parameter.platformEffector;
        _platformEffector.colliderMask &= ~(1 << LayerMask.NameToLayer("Player"));
    }

    public override void OnUpdate()
    {
        Vector3 position = Parameter.transform.position;
        Vector2 origin = new Vector2(position.x, position.y + Parameter.collider.size.y);
        if (Physics2D.Raycast(origin, Vector2.up, 1f, LayerMask.GetMask("Platform")).collider == _platformCollider)
        {
            _platformEffector.colliderMask |= 1 << LayerMask.NameToLayer("Player");
        }
    }
}

禁用碰撞图层

XXX.colliderMask &= ~(1 << LayerMask.NameToLayer("XXX"))

开启碰撞图层

XXX.colliderMask |= 1 << LayerMask.NameToLayer("XXX");

后记

由于个人能力有限,文中不免存在疏漏之处,恳求大家斧正,一起交流,共同进步。

标签:Unity2D,平台,碰撞,玩家,colliderMask,platformEffector,横版,跳跃,图层
From: https://www.cnblogs.com/kkelin/p/18169468

相关文章

  • Unity2D横板游戏之背景视差与无限滚动效果
    Unity2D横板游戏之背景视差与无限滚动效果简单介绍背景视差效果。在2D横板游戏中,由若干个背景图片构成的背景,在背景移动的过程中,每一个背景图片的移动速度均不同,靠近玩家的背景图片移动速度快,而远离玩家的背景图片移动速度慢,从而形成背景的视差效果,使背景更加立体且富有层级。......
  • 跳跃表的结构和插入过程
    跳跃表再插入数据之前,会随机返回该数据需要建立几层索引,比如我们现在要插入6,且需要建立二层索引: 首先6会与2及8进行比较,发现在其中间,于是下沉到2级索引 下沉到2级索引后发现比2与4都大,跳跃到4与7之间,同时建立6的二级索引 这时再从4往下沉到1级索引,发现仍旧在4与7之前,直......
  • 跳跃游戏精细化
    跳跃游戏​ 给定一个数组,每个元素代表跳跃的距离,判断是否能从起点出发,跳到数组的末尾。​ 例如:给定一数组[3,7,8,1,5],从起点出发,可以跳跃3步,跳到位置3,然后跳1步,跳到位置4,跳4步到达末尾思路分析定义一个变量,用来初始化当前能到达最远位置遍历数组,获取当前位置索引及值,这里使用到e......
  • 32天【代码随想录算法训练营34期】第八章 贪心算法 part02 (● 122.买卖股票的最佳时
    122.买卖股票的最佳时机IIclassSolution:defmaxProfit(self,prices:List[int])->int:result=0foriinrange(len(prices)-1):ifprices[i+1]-prices[i]>0:result+=prices[i+1]-prices[i]return......
  • 力扣经典150题第九题:跳跃游戏
    目录1.简介2.问题描述3.解题思路方法一:贪心算法4.算法实现方法一:贪心算法5.示例与测试6.总结与展望7.结语1.简介本篇博客将讨论力扣经典150题中的跳跃游戏问题。给定一个非负整数数组nums,数组中的每个元素代表在该位置可以跳跃的最大长度,判断是否能够从......
  • Redis的跳跃表
    在Redis中,有一种高效的数据结构叫做有序集合(zset)它是一种集合,其中每个成员(member)都会关联一个分数(score)。zset既可以快速地通过member找到该成员对应的分数,又可以按照分数的大小进行范围查询,这对于实现排行榜等功能非常有用。那么zset是如何实现这样的功能的呢?答案是跳跃......
  • 数据结构篇:跳跃表与B+树的对比与优劣分析
       本文旨在探讨跳跃表的特性及其在实际应用场景中的作用,同时对其与B+树进行比较,以帮助更好地理解和运用这两种数据结构。跳跃表什么是跳跃表(skiplist)        跳跃表是一种基于跳跃链表的有序数据结构,它是一种多层链表,每一层都是一个有序的链表。表的每一层......
  • 玩家角色——角色跳跃
    目标跳跃动画资源处理角色动画蓝图添加跳跃逻辑角色蓝图添加跳跃输入逻辑,同时重构角色蓝图中的输入屏蔽角色蓝图镜头控制优化角色增加二段跳角色跳跃手感及表现1.跳跃动画资源处理将跳跃动画资源导入后,切分为三个动作后(起跳,下落循环,着陆)加入动画源2.角色动画蓝图添加......
  • 【INDEX_SS】使用HINT使SQL用索引跳跃扫描(Index Skip Scan)方式快速获取数据
    索引跳跃扫描(IndexSkipScan)可以使用到复合索引的非前缀索引列,达到改善性能的作用,前提是全表扫面的代价高于索引跳跃式扫描的代价。这里给出使用HINT方法使SQL走索引跳跃扫描的方法。1.初始化环境1)创建表Tsec@ora10g>createtablet(xnumber,ynumber);Tablecreated.2)初始化10......
  • Android TV Recyclerview长按或连续按键,焦点丢失(或者焦点跳跃)
    原因分析RecyclerView设置适配器后,将数据填充进去,并不会将所有item的view都创建出来,一般只会创建一个屏幕的Item,当长按或者快速按下键时,Recyclerview来不及创建即将获取焦点的view,导致焦点丢失解决方法有两种思路:(1)控制按键速度 这里有两种具体实现策略:一种是记录......