事先把模型打包成ab包,然后加载包内的模型进行截图
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public class jietu : MonoBehaviour
{
// Start is called before the first frame update
public GameObject cba;
private Transform canvasTrans;
void Start()
{
//canvasTrans = GameObject.Find("2D画布").transform;
string nn = "";
AssetBundle ab = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + "/AssetBundle/sculpture.u3d.unity3d", 0).assetBundle;
for (int i = 0; i < ab.GetAllAssetNames().Length; i++)
{
nn = ab.GetAllAssetNames()[i];
cba = Instantiate(ab.LoadAsset<GameObject>(nn));
ClickBuild();
}
}
// Update is called once per frame
void Update()
{
}
public void ClickBuild()
{
string fileNameWithoutEnd = cba.name;
Texture2D texture2D = RuntimePreviewGenerator.GenerateModelPreview(cba.transform, 512, 512, false);
Texture2D texture = duplicateTexture(texture2D);
SaveTextureToFileABC(texture, fileNameWithoutEnd);
}
Texture2D duplicateTexture(Texture2D source)
{
RenderTexture renderTex = RenderTexture.GetTemporary(
source.width,
source.height,
0,
RenderTextureFormat.Default,
RenderTextureReadWrite.Linear);
Graphics.Blit(source, renderTex);
RenderTexture previous = RenderTexture.active;
RenderTexture.active = renderTex;
Texture2D readableText = new Texture2D(source.width, source.height);
readableText.ReadPixels(new Rect(0, 0, renderTex.width, renderTex.height), 0, 0);
readableText.Apply();
RenderTexture.active = previous;
RenderTexture.ReleaseTemporary(renderTex);
return readableText;
}
void SaveTextureToFileABC(Texture2D texture2D, string nameStr)
{
var bytes = texture2D.EncodeToPNG();
var file = File.Open(Application.streamingAssetsPath + "/2/sptImages/" + nameStr + ".png", FileMode.Create);
var binary = new BinaryWriter(file);
binary.Write(bytes);
file.Close();
}
}