首页 > 其他分享 >Unity引擎2D游戏开发,滑铲功能实现总结

Unity引擎2D游戏开发,滑铲功能实现总结

时间:2024-01-31 17:26:24浏览次数:34  
标签:false isSlide localScale transform 2D Unity 引擎 position physicsCheck

滑铲到悬崖边下落时无法取消动画

由于是使用的协程方式实现,所以当滑铲到悬崖边的时候,不能使用yield break,因为该指令会直接退出当前的协程方法,无法执行到isSlide = false指令

private IEnumerator TriggerSlide(Vector3 target)
{
    do
    {
        yield return null;
        if(!physicsCheck.isGround)
        {
            break;
        }
        if (physicsCheck.touchLeftWall || physicsCheck.touchRightWall)
        {
            isSlide = false;
            break;
        }
        rb.MovePosition(new Vector2(transform.position.x + transform.localScale.x * slideSpeed, transform.position.y));
    } while (Math.Abs(target.x - transform.position.x) > 0.1f);
    isSlide = false;
}

滑铲时无敌(不受到敌人伤害)

通过修改人物的Layer实现,滑铲时更改到和敌人相同的Layer

if (!isSlide && physicsCheck.isGround)
{
    isSlide = true;
    var targetPosition = new Vector3(transform.position.x + slideDistance * transform.localScale.x, transform.position.y);
    gameObject.layer = LayerMask.NameToLayer("Enemy");
    StartCoroutine(TriggerSlide(targetPosition));
}

滑铲完毕后,改回玩家的Layer

gameObject.layer = LayerMask.NameToLayer("Player");

靠墙时无法滑铲

之前代码中,触及墙壁不给滑铲,目的是滑铲过程中撞墙取消滑铲。所以,添加一个条件,即面朝墙壁方向时

// 滑动过程中撞墙
if (physicsCheck.touchLeftWall && transform.localScale.x < 0f || physicsCheck.touchRightWall && transform.localScale.x > 0f)
{
    isSlide = false;
    break;
}

跳跃打断滑铲

// 打断滑铲协程
StopAllCoroutines();
isSlide = false;

标签:false,isSlide,localScale,transform,2D,Unity,引擎,position,physicsCheck
From: https://www.cnblogs.com/xinlindeyu/p/17999710

相关文章

  • Deep3DFaceRecon 2D图像转3D模型实战
    本案例通过Deep3DFaceRecon_pytorch实现前置文档:https://github.com/sicxu/Deep3DFaceRecon_pytorchhttps://blog.csdn.net/flyfish1986/article/details/121861086本文是在本地没有gpu硬件的支持下的实现方案,并不具体描述部署过程,部署过程建议看上面两个文档地址准备工程文......
  • Mysql中存储引擎InnoDB,MyISAM,MEMORY比较
    Mysql中存储引擎InnoDB,MyISAM,MEMORY比较showENGINES--查看数据库支持的搜索引擎ENGINE=InnoDB--使用的InnoDB引擎CREATETABLE`user1`(`id`bigint(20)NOTNULLDEFAULT'0',`name`varchar(255)DEFAULTNULL,`age`int(11)DEFAULTNULL,`sex`varchar(255)......
  • Bug记录 ontriggerstay2d 碰撞体中连续执行两次
    Bug描述ontriggerstay2d碰撞体中连续执行两次出现场景在OnTriggerStay2D中进行判定,按下指定按键(或判断需要执行单次逻辑的控制器)时,判定成功后执行两次或更多。问题分析1.多个碰撞器进入判定区域可能进入判定区域的物体上挂载多种碰撞器,导致在判定成功后,执行多次后续逻辑。......
  • Unity引擎2D游戏开发,滑墙及蹬墙跳的实现总结
    一、滑墙动画的实现执行动画的逻辑//在墙壁上onWall=(touchLeftWall||touchRightWall)&&!isGround;基本逻辑:紧贴墙壁并且不在地面上的时候执行滑墙动画但是实际上,紧贴墙壁原地跳起也会执行滑墙动画所以,需要额外添加一个条件。跳起离开地面,并施加与面朝X轴方向的力......
  • CF282D Yet Another Number Game
    题意简述有\(n\)堆石子,第\(i\)堆包含\(a_i\)个,每次可以选择任意一堆取出任意数量石子,也可以选择对于所有石子堆都拿走任意数量化石子。问先手必胜还是后手必胜。\(n\le3,a_i\le300\)。解法一:动态规划发现\(a_i^3=2.7\times10^7\),完全能压到状态里,直接做dp即可。但......
  • Unity架构师进阶:红点系统的架构与设计
     面试的时候经常被问道如何来设计一个红点系统,本文将详细地介绍如何设计一个红点系统,有哪些接口,并完整地给出实现。红点系统的需求分析首先我们来分析一下红点系统的设计需求: 红点系统严格意义上来说不属于框架,而是游戏逻辑,所以代码不要放到通用的框架里面,并不属于基础服务......
  • Unity3D DrawCall和openGL、光栅化等有何内在联系详解
    前言Unity3D是一款跨平台的游戏引擎,广泛应用于游戏开发领域。在Unity3D中,DrawCall是一个重要的概念,它与OpenGL、光栅化等技术有着密切的内在联系。本文将详细解释DrawCall的概念,并给出相关技术的详细解释和代码实现。对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交......
  • Unity5.x shader打包AssetBundle总结
    unity5.x  shader打包AssetBundle总结最近比较忙,好久没有更新博客了,新项目切换到unity5.x后使用了新的打包机制,在打包shader的时候遇到了一些问题,这里来记录一下吧。 在上一个项目中,我们使用unity4.7,对于shader并没有进行依赖打包,而是由unity打包到了每个用到的AssetBundle......
  • SQL变量数据加工在Java规则引擎中的应用案例分析
    SQL变量加工SQL加工背景,在决策配置过程中,一些复杂的逻辑或模型可通过自定义SQL脚本编写创建数据变量,通过SQL脚本可以便捷的从数据库中取数,并且自定义SQL支持传参,可满足更复杂多变的数据加工处理。注意,SQL变量加工和算子编排加工的方式不同,SQL变量加工依赖于对应数据源的服务器的性......
  • Unity3D DrawCall和openGL、光栅化等有何内在联系详解
    Unity3D是一款跨平台的游戏引擎,广泛应用于游戏开发领域。在Unity3D中,DrawCall是一个重要的概念,它与OpenGL、光栅化等技术有着密切的内在联系。本文将详细解释DrawCall的概念,并给出相关技术的详细解释和代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础......