我正在创建像Crypt of the necrodancer这样的视频游戏,当我想生成地图时我被阻止了 我的想法很简单: 创建一个网格系统并替换一些瓷砖以具有特定的瓷砖(障碍物,墙壁等),但我不知道如何存储信息以替换我的瓷砖。
我基于Sebastian Lague教程中的网格生成图
我想在检查器中更换我的瓷砖
据我所知,我已经找到了一个脚本,可以用另一个脚本替换某些瓦片,但是我无法保存它... 这是替换内容的脚本
using UnityEngine;
using UnityEditor;
public class ReplaceWithPrefab : EditorWindow
{
[SerializeField] private GameObject prefab;
[MenuItem("Tools/Replace With Prefab")]
static void CreateReplaceWithPrefab()
{
EditorWindow.GetWindow<ReplaceWithPrefab>();
}
private void OnGUI()
{
prefab = (GameObject)EditorGUILayout.ObjectField("Prefab", prefab, typeof(GameObject), false);
if (GUILayout.Button("Replace"))
{
var selection = Selection.gameObjects;
for (var i = selection.Length - 1; i >= 0; --i)
{
var selected = selection[i];
var prefabType = PrefabUtility.GetPrefabType(prefab);
GameObject newObject;
if (prefabType == PrefabType.Prefab)
{
newObject = (GameObject)PrefabUtility.InstantiatePrefab(prefab);
}
else
{
newObject = Instantiate(prefab);
newObject.name = prefab.name;
}
if (newObject == null)
{
Debug.LogError("Error instantiating prefab");
break;
}
Undo.RegisterCreatedObjectUndo(newObject, "Replace With Prefabs");
newObject.transform.parent = selected.transform.parent;
newObject.transform.localPosition = selected.transform.localPosition;
newObject.transform.localRotation = selected.transform.localRotation;
newObject.transform.localScale = selected.transform.localScale;
newObject.transform.SetSiblingIndex(selected.transform.GetSiblingIndex());
Undo.DestroyObjectImmediate(selected);
}
}
GUI.enabled = false;
EditorGUILayout.LabelField("Selection count: " + Selection.objects.Length);
}
}
有关如何保存信息的任何想法?
答案 0 :(得分:0)
Unity最近在几个版本中添加了tilemap系统。似乎正是您要找的东西,它已经为您处理了网格。
您可以在此处了解更多信息: https://docs.unity3d.com/Manual/class-Tilemap.html
您可以使用SetTile方法和Tile对象编辑tilemap,而不是实例化一系列预制件。 Tiles本身是使用Tile Palette创建的,您也可以在上一页中了解更多信息。