Beispiel #1
0
 public static void ShowBlock(CSBlockType type)
 {
     instance.handMeshRenderer.enabled = false;
     instance.blockMeshFilter.mesh     = ChunkMeshGenerator.GetBlockMesh(type);
     instance.blockMeshRenderer.material.mainTexture = ChunkMeshGenerator.GetBlockTexture(type);
     instance.blockMeshFilter.transform.gameObject.SetActive(true);
 }
Beispiel #2
0
    // Start is called before the first frame update
    void Start()
    {
        shadowTrans = transform.Find("shadow");
        shadow      = shadowTrans.GetComponent <Renderer>().material;

        meshTrans = transform.Find("mesh_parent/mesh");
        MeshFilter meshFilter = meshTrans.GetComponent <MeshFilter>();

        meshFilter.sharedMesh = ChunkMeshGenerator.GetBlockMesh(type);
        if (ChunkMeshGenerator.IsCubeType(type))
        {
            meshFilter.transform.localScale = Vector3.one / 2;
        }

        meshTrans.GetComponent <MeshRenderer>().material.mainTexture = ChunkMeshGenerator.GetBlockTexture(type);

        RefreshMesh();
    }
Beispiel #3
0
    string Render(CSBlockType type, string dir = null)
    {
        GameObject go = null;

        if (type != CSBlockType.Chest)
        {
            go = new GameObject();
            go.AddComponent <MeshFilter>().sharedMesh                   = ChunkMeshGenerator.GetBlockMesh(type);
            go.AddComponent <MeshRenderer>().sharedMaterial             = new Material(Shader.Find("Custom/CutoutDiffuse"));
            go.GetComponent <MeshRenderer>().sharedMaterial.mainTexture = ChunkMeshGenerator.GetBlockTexture(type);
        }
        else
        {
            GameObject prefab = Resources.Load <GameObject>("Prefabs/Entity/Chest");
            go = Instantiate(prefab);
        }

        RenderTexture rt = RenderTexture.GetTemporary(size * 2, size * 2, 24, RenderTextureFormat.ARGB32);

        Camera.main.targetTexture = rt;
        Camera.main.Render();
        Camera.main.targetTexture = null;

        Texture2D tex = new Texture2D(size, size, TextureFormat.ARGB32, true);

        //降分辨率
        RenderTexture tempRt = RenderTexture.GetTemporary(tex.width, tex.height, 24, RenderTextureFormat.ARGB32);

        Graphics.Blit(rt, tempRt);

        RenderTexture.active = tempRt;
        tex.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
        tex.Apply();
        RenderTexture.active = null;

        rt.Release();
        tempRt.Release();

        string path = "";

        if (dir == null)
        {
            path = EditorUtility.SaveFilePanel("保存", "", type.ToString(), "png");
            if (path.Length == 0)
            {
                DestroyImmediate(tex);
                DestroyImmediate(go);
                return(null);
            }
            path = path.Substring(path.IndexOf("Assets"));
        }
        else
        {
            path = dir + "/" + type.ToString() + ".png";
            path = path.Substring(path.IndexOf("Assets"));
        }

        byte[] bytes = tex.EncodeToPNG();
        System.IO.File.WriteAllBytes(path, bytes);
        AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate);

        TextureImporter TextureI = AssetImporter.GetAtPath(path) as TextureImporter;

        TextureI.textureCompression = TextureImporterCompression.Uncompressed;
        TextureI.mipmapEnabled      = false;
        TextureI.wrapMode           = TextureWrapMode.Clamp;
        AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate);

        AssetDatabase.Refresh();

        DestroyImmediate(tex);
        if (DestroyAfterFinish)
        {
            DestroyImmediate(go);
        }

        return(path);
    }