unity 陶瓷质感_Unity2D:简单自动瓷砖(Tile)的实现

这篇博客介绍了如何在Unity2D中实现一个简单的自动瓷砖系统,包括根据周围格子状态改变自身状态和合并2D物理碰撞体的功能。通过遍历GameObjec并在特定范围内处理瓷砖间的相对关系,实现自动化效果。文章提供了基类`AutoTile`和子类`AutoEdgeTiles`的代码示例,用于更新和处理不同类型的瓷砖Sprite及碰撞体。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

unity2017官方已经支持了瓷砖,但我自己也写了个简单的自动瓷砖,权当学习,效果如图。

image

主要实现了两个功能:

① 根据周围格子的状态改变自己的状态

② 对2D物理碰撞体进行自动合并,优化性能

基本思路是遍历特定范围中的每个GameObjec,然后计算坐标,再通过坐标来处理瓷砖间的相对关系。先看基类,主要处理变换坐标的工作:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class AutoTile : MonoBehaviour

{

/* 图块边长 */

public float sideLength;

/* 是否合并碰撞体 */

public bool isCoillder;

/* 左下角的起始块,标定开始计算的位置 */

public GameObject startOne;

/* 存储地图 */

List mapContainer = new List();

protected Transform[] childrenTransforms;

/* 存储子物体 */

protected Vector2 basePoint;

/* 从startone获取的起点 */

/* 初始化起点 */

protected void intinalBasePoint()

{

basePoint = startOne.transform.position;

/* Debug.Log ("BasePoint=" + basePoint); */

}

/* 初始化存储块信息的变长数组 */

protected void intinalMapContainer()

{

/* 获取子物体的数组 */

childrenTransforms = GetComponentsInChildren ( false );

foreach ( Transform tra in childrenTransforms )

{

/* 利用tag判断是否纳入计算 */

if ( tra.tag == "Tile" )

{

Vector2 pos = tra.position;

int x, y;

x = (int) ( (pos.x - basePoint.x) / sideLength + 0.05f);

/* 加0.05防止误差 */

y = (int) ( (pos.y - basePoint.y) / sideLength + 0.05f);

/* 判断是否延长主组 */

while ( mapContainer.Count <= x )

{

mapContainer.Add( new ArrayList() );

}

/* 向列数组填充元素 */

while ( mapContainer [x].Count <= y )

{

mapContain

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值