上一章我们使用img作为地形,但是在Unity中,地形有几种做法。目前我使用过的有三种:Image、Terrain、Tile Palette。
对比项目 | Image | Terrain | Tile Palette |
---|---|---|---|
创建方式 | 通过在场景中放置单个或多个图片来组合成地形 | 在 Unity 中使用地形工具进行高度图绘制等操作来创建地形 | 将多个图块组合成调色板,通过绘制操作快速搭建地形 |
灵活性 | 较高,可通过各种图片组合实现各种形状和风格的地形,但布局较为繁琐 | 相对较高,可通过地形工具绘制出复杂的地形起伏,但不太适合精确的 2D 图形绘制 | 中等,能通过图块组合创建多种地形,但受限于图块的预设和拼接规则 |
细节表现 | 可以通过高分辨率图片展示丰富细节,但需要手动处理每个图片的细节 | 可以通过纹理等方式表现一定细节,但在 2D 场景中可能不如专门的 2D 图形精细 | 取决于图块的细节程度,单个图块细节有限,但组合起来可呈现丰富效果 |
性能消耗 | 大量使用时可能导致性能问题,因为每个图片都是独立的渲染对象 | 在 2D 游戏中一般性能消耗比 Image 低,但如果地形过于复杂也可能影响性能 | 性能较好,图块地图可作为整体渲染,减少渲染批次 |
编辑难度 | 单个图片编辑容易,但组合成复杂地形时编辑和调整布局较麻烦 | 需要一定时间学习地形编辑工具,对高度图等概念有一定要求 | 需要掌握图块的使用和拼接规则,自定义图块脚本有一定编程门槛 |
适用场景 | 适合需要特定图形样式、少量且不规则地形元素的场景,如 2D 解谜游戏中的特殊道具、装饰等 | 不太适合纯粹的 2D 游戏地形创建,更适用于有一定地形起伏需求的 2.5D 游戏或对地形要求不高的 2D 游戏 | 适合 2D 平台游戏、像素风格游戏、需要快速搭建大量重复性地形的 2D 游戏 |
OK,所以作为不会变化的竞技场外圈,Tile Palette显然是最优化性能的做法了。
菜单栏的Windows下 选择2dobject里面的Tile Palette。创建新的tile并保存在单独的文件夹内。
然后沿着之前的墙壁绘图,并添加Tilemap Collider 2D。
之后继续拖入其他纹理,绘制圆角边缘,如图:
接下来,在Unity Store下载免费资源:Free Platform Game Assets
导入项目后,使用各种元素装点地形:
图中因为摇杆过于明显,遮住了视野,降低他的透明度。
下一步是使场景合理,比如实现穿过灌木丛的效果,高于灌木丛则被遮挡,走过去就遮挡灌木丛。应该好理解。
所以设置一下角色的锚点作为底部中心,并重新修改碰撞collider。
对所有地图的点缀元素 进行同样操作。
接下来新建一个SpriteSorter脚本,使图层自动排序,并为角色与场景元素添加此脚本。
脚本内容:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpriteSorter : MonoBehaviour
{
[Header("元素")]
private SpriteRenderer spriteRenderer;
// Start is called before the first frame update
void Start()
{
spriteRenderer = GetComponent<SpriteRenderer>();
}
// Update is called once per frame
void Update()
{
spriteRenderer.sortingOrder = -(int)(transform.position.y * 10);
}
}
不懂得直接代码复制拉入ai,让他们加上中文注释以及解释。比如豆包、通义。
这也是一种快速学习的方法,尤其是阅读大佬的源码读不懂的时候问Ai特别管用。