public void Start() { //开关角色控制 //GameControlHandler.Instance.SetPlayerControlEnabled(true); //GameHandler.Instance.manager.SetGameState(GameStateEnum.Gaming); MeshFilter meshFilter = GetComponent <MeshFilter>(); TextAsset textAsset = LoadAddressablesUtil.LoadAssetSync <TextAsset>($"Assets/Prefabs/BlockMeshData/BlockCraftingTableSimple.txt"); MeshDataCustom meshDataCustom = JsonUtil.FromJson <MeshDataCustom>(textAsset.text); Mesh mesh = meshFilter.mesh; mesh.vertices = meshDataCustom.mainMeshData.vertices; mesh.uv = meshDataCustom.mainMeshData.uv; mesh.triangles = meshDataCustom.mainMeshData.triangles; mesh.RecalculateNormals(); mesh.RecalculateTangents(); mesh.RecalculateBounds(); meshFilter.mesh = mesh; }
public override void InitData(Block block) { base.InitData(block); blockMeshData = block.blockInfo.GetBlockMeshData(); vertsAdd = blockMeshData.mainMeshData.vertices; trisAdd = blockMeshData.mainMeshData.triangles; uvsAdd = blockMeshData.mainMeshData.uv; colorsAdd = new Color[uvsAdd.Length]; for (int i = 0; i < colorsAdd.Length; i++) { colorsAdd[i] = Color.white; } if (!blockMeshData.verticesCollider.IsNull()) { vertsColliderAddCustom = blockMeshData.verticesCollider; } if (!blockMeshData.trianglesCollider.IsNull()) { trisColliderAddCustom = blockMeshData.trianglesCollider; } }
/// <summary> /// 创建所有方块的mesh数据 /// </summary> public static void CreateBlockMeshData() { FileInfo[] files = FileUtil.GetFilesByPath($"{Path_Block_MeshModel}"); if (files.IsNull()) { LogUtil.Log("CreateBlockMeshData Fail No Block"); return; } AddressableAssetGroup addressableAssetGroup = AddressableUtil.FindOrCreateGroup("BlockMesh"); for (int i = 0; i < files.Length; i++) { FileInfo itemFile = files[i]; if (itemFile.Name.Contains(".meta")) { continue; } LogUtil.Log($"CreateBlockMeshData:{itemFile.Name}"); GameObject obj = EditorUtil.GetAssetByPath <GameObject>($"{Path_Block_MeshModel}/{itemFile.Name}"); Collider colliderModel = obj.GetComponentInChildren <Collider>(); //首先获取主体 Transform tfModel = obj.transform.Find("Model"); MeshFilter meshFilterModel = null; if (tfModel != null) { meshFilterModel = tfModel.GetComponentInChildren <MeshFilter>(); } MeshDataCustom meshData; if (meshFilterModel != null) { Vector3 offsetPosition = new Vector3(0.5f, 0f, 0.5f); if (tfModel != null) { offsetPosition += (tfModel.localPosition - new Vector3(0.5f, 0.5f, 0.5f)); offsetPosition += meshFilterModel.transform.localPosition + new Vector3(0f, 0.5f, 0f); } meshData = new MeshDataCustom(colliderModel, meshFilterModel.sharedMesh, 0.03125f, offsetPosition, meshFilterModel.transform.localEulerAngles); } else { meshData = new MeshDataCustom(colliderModel, 0.03125f, new Vector3(0.5f, 0f, 0.5f), Vector3.zero); } //获取Other List <Mesh> listMesh0ther = new List <Mesh>();; List <float> listSizeOther = new List <float>(); List <Vector3> listOffsetOther = new List <Vector3>(); List <Vector3> listRotateOther = new List <Vector3>(); for (int f = 1; f < 10; f++) { Transform tfOther = obj.transform.Find($"Other{f}"); if (tfOther == null) { continue; } MeshFilter meshFiltertfOther = tfOther.GetComponentInChildren <MeshFilter>(); Collider colliderOther = tfOther.GetComponentInChildren <Collider>(); if (meshFiltertfOther != null) { Vector3 offsetPosition = new Vector3(0.5f, 0f, 0.5f); offsetPosition += (tfOther.localPosition - new Vector3(0.5f, 0.5f, 0.5f)); offsetPosition += meshFiltertfOther.transform.localPosition + new Vector3(0f, 0.5f, 0f); listSizeOther.Add(0.03125f); listOffsetOther.Add(offsetPosition); listMesh0ther.Add(meshFiltertfOther.sharedMesh); listRotateOther.Add(meshFiltertfOther.transform.localEulerAngles); } } if (!listMesh0ther.IsNull()) { meshData.SetOtherMeshData(listMesh0ther, listSizeOther, listOffsetOther, listRotateOther); } string jsonData = JsonUtil.ToJson(meshData); string saveFileName = $"{itemFile.Name.Replace(".prefab", "").Replace(".obj", "")}"; //创建文件 FileUtil.CreateTextFile($"{Application.dataPath}/Prefabs/BlockMeshData", $"{saveFileName}.txt", jsonData); //添加到addressable中 string addressName = $"Assets/Prefabs/BlockMeshData/{saveFileName}.txt"; AddressableUtil.AddAssetEntry(addressableAssetGroup, addressName, addressName); } EditorUtil.RefreshAsset(); }