c# - Unity 3D:如何存储和替换网格中的预制件?
问题描述
我正在创建一个像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);
}
}
关于如何保存信息的任何想法?
解决方案
Unity 最近在几个版本前添加了一个 tilemap 系统。它似乎是您正在寻找的东西,它已经为您处理了网格。
您可以在此处阅读更多相关信息: https ://docs.unity3d.com/Manual/class-Tilemap.html
您可以使用 SetTile 方法和 Tile 对象编辑 tilemap,而不是实例化一堆预制件。瓷砖本身是使用瓷砖调色板创建的,您也可以在上面的页面中阅读更多信息。
推荐阅读
- ios - 如果答案不正确,防止警报操作解除 UIAlertController - Swift 4
- phpunit - 测试状态码需要 500 而不是 200
- asp.net - 如何将日志跟踪系统添加到现有的 asp.net 应用程序
- apache-spark - 如何知道我的 spark 流式查询没有任何新的 kafka 记录可供使用?
- openssl - OpenSSL - RSA PSS - 有没有办法使用预定义的盐值?
- ember.js - 商店已有数据后,Ember 子状态与 Ember 数据
- regex - Gitlab CI替换文件中的出现
- java - META-INF\maven\ 中的 jar 内的 pom.xml 没有受到影响
- python - 基于检查条件在 csv 输出文件的每一行末尾添加新值的 Python 脚本
- javascript - 重定向后执行一个函数 jQuery / JavaScript