说明:本教程实现的是在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;//初始创建地图为true
Invoke("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