Esempio n. 1
0
    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;
    }
Esempio n. 2
0
    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;
        }
    }
Esempio n. 3
0
    /// <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();
    }