游戏开发小结——如何在Unity中创建有边界的2D地图

这篇具有很好参考价值的文章主要介绍了游戏开发小结——如何在Unity中创建有边界的2D地图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

游戏开发小结——如何在Unity中创建有边界的2D地图

在Unity中创建一个2D游戏的有边界地图,并使其连接边缘。这是一种轻量级且简单的解决方案,适用于皇室战争和其他类型的游戏。

在创建地图时,我们希望将玩家限制在边界内。但是,让世界实际上在自身上包裹也很好:这可以为游戏机制提供有趣的元素,同时也给玩家一种增加自由度的印象。
在本文中,我们将向您展示如何为2D游戏实现这种行为的简单方法。
在N乘以M网格地图中限制玩家位置
在大多数情况下,2D游戏的地图被定义为完全填充的N乘以M网格。在这种情况下,将玩家的位置限制在边界内的明显解决方案是检查其相对于定义边界的位置,并相应地进行调整。
这可以通过一个简单的Monobehaviour组件实现:

class PositionClamper: MonoBehaviour {
  public int mapWidth;
  public int mapHeight;

  void LateUpdate() {
    Vector3 pos = transform.position;

    //假设地图从(0,0)开始
    pos.x = Mathf.Max(Mathf.Min(pos.x, mapWidth), 0);
    pos.y = Mathf.Max(Mathf.Min(pos.y, mapHeight), 0);

    // 设置transform position.。尽可能使用本地位置local position 
  }
}

这将确保玩家的位置被夹在地图尺寸内。
需要注意的一点是,多个游戏对象将检查这些边界,因此您应该考虑重写它们以使用外部数据源,例如Scriptable object或单例。这将更方便,而且比在每个游戏对象中直接指定字段要容错性更强。

实现环绕坐标

这也是相当简单的,我们只需要检查转换位置是否超出边界,并相应地调整它。
我们还将使用一个布尔值来检查是否想要环绕的位置。

class PositionClamper: MonoBehaviour {
  public int mapWidth;
  public int mapHeight;

  public bool isWrapping;

  void LateUpdate() {
    Vector3 pos = transform.position;


    if (bIsWrapping) {
      如果我们到达地图的x边界,请将位置回绕到0,使用地图尺寸
      if (pos.x > mapWidth) {
        pos.x -= mapWidth;
      } else if (pos.x < 0f) {
        pos.x += mapWidth;
      }
      
      //  我们对y也做同样的事情
      if (pos.y > mapHeight) {
        pos.y -= mapHeight;
      } else if (pos.y < 0f) {
        pos.y += mapHeight;
      }

    } else {
      pos.x = Mathf.Max(Mathf.Min(pos.x, mapWidth), 0);
      pos.y = Mathf.Max(Mathf.Min(pos.y, mapHeight), 0);
    }


    // 设置transform position。尽可能使用本地位置local position
    transform.position = pos;
  }
}

这样,当玩家到达地图边界时,他将实际上被传送到地图的另一端。
需要注意的是,实际上有一种更简洁的方法来编写上面的代码并避免编写if:使用模运算符!

pos.x = pos.x % mapWidth;
pos.y = pos.y % mapHeight;

绘制更多精灵以模拟无缝过渡

上述方法的主要问题是,当其他人查看时,玩家将似乎“瞬移”。
再次使用一个简单的技巧:我们只需绘制更多的spirte!
使用我们当前的玩家Gameobject作为中心,我们需要添加其他Gameobject,其中包含相同的spirte但位于不同的位置:(-mapWidth,0),(mapWidth,0),(0,-mapHeight),(0,mapHeight)。
尽管简单,但这种方法需要您在子级之间共享spirte的当前状态,并且您需要将其应用于所有具有spirte renderer的Gameobject。
尽管如此,由于您多次绘制相同的spirte,它们将被批处理,因此对性能的影响不应该太大。文章来源地址https://www.toymoban.com/news/detail-444317.html

到了这里,关于游戏开发小结——如何在Unity中创建有边界的2D地图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏4(附项目源码)

    本期紧接着上一篇,本期主要内容是实现商店、购买、出售、升级等功能。 新增TurretSettings 配置不同炮塔参数 绘制商店UI 新增TurretCard,渲染商品数据,如果前面有绘制价格文本,还可以渲染价格文本,这里我就偷懒不弄了 挂载脚本,并配置 新增TurretShopManager,商店管理器

    2024年01月21日
    浏览(63)
  • 【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏1(附项目源码)

    当今,塔防游戏已经成为游戏市场上备受欢迎的一类游戏类型。《保卫萝卜》作为其中的经典之作,深受玩家喜爱。本项目旨在基于《保卫萝卜》的玩法和特点,开发一个Unity2D塔防游戏,让玩家可以在游戏中体验到精彩的策略对抗与刺激的关卡挑战。 本项目将通过Unity引擎进

    2024年02月04日
    浏览(55)
  • 【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏5(附项目源码,完结)

    本期是本项目的最后一篇,主要内容是配置环境、生成不同敌人、结束重开。 我用的环境素材 https://assetstore.unity.com/packages/2d/environments/2d-sugar-world-asset-pack-urp-256585

    2024年02月05日
    浏览(58)
  • 【Unity2D】相机移动以及设置相机边界

    添加相机时,首先需要在unity中添加 Cinemachine 包 第一次使用这个包时,需要在Package Manager中搜索并安装  安装Camera Mechine包后,添加2D Camera 设置跟随对象为Ruby (从Hierarchy中将Ruby拖动到Follow中)   同时,由于世界是有边界的,要为相机设置边界 通过添加Extension为相机添加

    2024年02月16日
    浏览(44)
  • Unity2D设置摄像机跟随和边界范围

            在制作2D游戏时时常会遇到需要设置摄像机跟随玩家的情况,一般情况下有三种处理比较简单的处理方法,第一种也是简单粗暴的方法,把摄像机直接作为玩家的子物体就可以了,当然这样做的后果就是不利于后续扩展更多的功能,比如切换玩家控制的角色时,你

    2024年02月13日
    浏览(65)
  • Unity 新建你的第一个游戏,以及如何按WASD控制角色运动 (Unity Demo2D)

    当你打开 Unity Hub,初始化一个 2D 项目,进入了 Unity 编辑器,你会发现在 左侧 : 一个叫 SampleScene (或者其他) 的场景 场景下有一个 Main Camera,主相机 这就是一个新建的 2D 项目自带的内容。 在 Main Camera 同级目录新建: 2D Object - Sprites - Capsule ,这里 Capsule 是精灵的种类,我们

    2024年02月02日
    浏览(46)
  • UNITY—2D游戏制作入门!

    Unity作为当今最流行的游戏引擎之一,受到各大厂商的喜爱。 像是炉石传说,以及逃离塔克夫,都是由unity引擎开发制作。 作为初学者的我们,虽然无法直接做出完成度那么高的作品,但每一个伟大的目标,都有一个微不足道的开始。让我们从一个2D小游戏入手,来学习Unit

    2024年02月04日
    浏览(56)
  • Unity——2D小游戏笔记整理

    【每日一句:清晨和夜晚都请用尽全力去生活】 目录 一、环境搭建 二、人物 三、相机跟随人物移动 四、平铺精灵 五、血条跟随敌人行走 六、脚本逻辑 【玩家行走方法】 【玩家跳跃方法】 【改变玩家血量值方法】 【创建玩家子弹方法】 【主角血量,改变血条遮罩】 【敌

    2024年02月09日
    浏览(56)
  • Unity Physics2D 2d物理引擎游戏 笔记

    2d 材质 里面可以设置 摩擦力 和 弹力 Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产生的GameObject,而取消勾选Simulated只是禁用。 Kinematic 动力学刚体 动力学刚体不受重力和力的影响,而受用户的

    2023年04月24日
    浏览(124)
  • unity-2D游戏地面检测 三射线检测

        2D游戏中跳跃是不可或缺的功能,要实现跳跃功能,就必须进行地面检测!常规方法是使用一根往角色下方延伸的射线检测,但是这种方法在一些复杂不规则的地面效果通常不尽人意。通过增加射线数量,即可完善这种方法的不足,达到在复杂地面也能正确检测角色是否

    2024年02月15日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包