当前位置: 首页 > news >正文

Unity2D无限地图的实现(简单好抄)

说明:本教程实现的是在2D游戏中玩家在游戏中上下左右移动的时候自动进行地图拼接的功能,如果你只想实现左右移动的无限地图,那么这篇博客也能起到一定参考作用。

思路

第一步: 创建一个10*10的2D游戏对象当做地图

第二步创建一个空对象并在里面创建8个小的2D对象并调整位置

 位置要和之前创建的地图的边张一致(不然不能做到无缝拼接)

第三步给地图添加碰撞体,给点位添加碰撞体,刚体,并设置为触发器

第4步创建一个玩家并给地图添加Map标签

同样给玩家添加刚体和碰撞体组件,同样重力质量设为0,设置为触发器

 

给地图添加标签

第五步编写玩家脚本 并加到玩家身上

using UnityEngine;public class PlayercontMap : MonoBehaviour
{public GameObject CreatPointcont;void OnTriggerEnter2D(Collider2D other){if (other.gameObject.tag == "Map"){CreatPointcont.transform.position = other.transform.position;//遍历CreatPointcont所有子对象并显示for (int i = 0; i < CreatPointcont.transform.childCount; i++){CreatPointcont.transform.GetChild(i).gameObject.SetActive(true);}}}
}

 将脚本附加到玩家身上并且将刚刚创建的管理点位的空对象拖到对应位置

第六步编写地图生成的脚本Creatpoint

先将地图拖到文件夹中做成预制体

using UnityEngine;public class Creatpoint : MonoBehaviour
{public GameObject Map;private bool isCreate = true;private void OnEnable(){isCreate = true;//初始创建地图为trueInvoke("Creat", 0.1f);}//执行创建地图void Creat(){if (isCreate){GameObject mapobj = Instantiate(Map, transform.position, Quaternion.identity);gameObject.SetActive(false);}else{gameObject.SetActive(false);}}//判断当前位置是否存在地图private void OnTriggerStay2D(Collider2D collision){if (collision.gameObject.tag == "Map"){isCreate = false;}}
}

 将脚本附加到所有的点位上并将地图预制体拖到这里

最后一步将点位设置为非激活状态

 

 运行游戏拖动Player就会发现地图自动创建成功了,为了避免地图过多你需要自己管理地图的数量,比如玩家离开过远后删除一些地图。

如果你有更好的生成无限地图的方式欢迎评论区讨论哦。

项目资源包https://github.com/laozhupeiqia/CreatMap.git 

http://www.lryc.cn/news/513532.html

相关文章:

  • TCP网络编程(一)—— 服务器端模式和客户端模式
  • 03-类和对象(上)
  • PCL点云库入门——PCL库点云滤波算法之统计滤波(StatisticalOutlierRemoval)
  • 【机器学习】Kaggle实战信用卡反欺诈预测(场景解析、数据预处理、特征工程、模型训练、模型评估与优化)
  • 【RISC-V CPU debug 专栏 4 -- RV CSR寄存器介绍】
  • Object.defineProperty() 完整指南
  • postgresql函数创建
  • ECMAScript 变量
  • CAN总线波形中最后一位电平偏高或ACK电平偏高问题分析
  • 【C++】22___STL常用算法
  • 意静明和-十成
  • easyui textbox使用placeholder无效
  • flux中的缓存
  • 代码重定位详解
  • 活动预告 | Microsoft 365 在线技术公开课:让组织针对 Microsoft Copilot 做好准备
  • 从0到机器视觉工程师(一):机器视觉工业相机总结
  • Docker安装(Docker Engine安装)
  • 数组的深度监听deep
  • 点击锁定按钮,锁定按钮要变成解锁按钮,然后状态要从待绑定变成 已锁定(升级版)
  • UniApp 性能优化策略
  • 【Linux报告】实训六 重置超级用户密码
  • smolagents:一个用于构建代理的简单库
  • 通过Dockerfile来实现项目可以指定读取不同环境的yml包
  • 云手机 —— 手机矩阵的 “超级外挂
  • OpenCV的TickMeter计时类
  • 蓝桥杯JAVA刷题--001
  • 免费又开源:企业级物联网平台的新选择 ThingsPanel
  • 鸿蒙开发:文本合成语音
  • 雷军:科技传奇的逐梦之旅
  • LeetCode - 初级算法 数组(删除排序数组中的重复项)