统一基于3D模型的2D化身肖像图像

时间:2018-07-31 15:15:58

标签: c# unity3d 3d 2d

是否可以统一生成3D角色/对象的2D化身肖像图片(.png),

在我的游戏过程中,我想动态生成并在滚动条UI组件中显示字符/对象的列表,而我懒得实际去手动制作这些2D图像。

我想知道是否可以从一组要显示的3D预制件中生成角色/对象肖像的列表,或者更可取的是手动生成图片和将图片添加为资产。

除了懒惰,将字符/对象添加到我的项目中并在更改后对其进行维护也变得容易得多。

1 个答案:

答案 0 :(得分:0)

您可以使用类似这样的脚本来拍摄场景照片。因此,您可以实例化游戏对象的某个位置,使其具有特定的方向,背景,照明,距相机的距离...然后,您将屏幕截图与其他资产一起存储在某个位置。

 using UnityEngine;
 using System.Collections;

 public class HiResScreenShots : MonoBehaviour {
     public int resWidth = 2550; 
     public int resHeight = 3300;

     private bool takeHiResShot = false;

     public static string ScreenShotName(int width, int height) {
         return string.Format("{0}/screenshots/screen_{1}x{2}_{3}.png", 
                              Application.dataPath, 
                              width, height, 
                              System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"));
     }

     public void TakeHiResShot() {
         takeHiResShot = true;
     }

     void LateUpdate() {
         takeHiResShot |= Input.GetKeyDown("k");
         if (takeHiResShot) {
             RenderTexture rt = new RenderTexture(resWidth, resHeight, 24);
             camera.targetTexture = rt;
             Texture2D screenShot = new Texture2D(resWidth, resHeight, TextureFormat.RGB24, false);
             camera.Render();
             RenderTexture.active = rt;
             screenShot.ReadPixels(new Rect(0, 0, resWidth, resHeight), 0, 0);
             camera.targetTexture = null;
             RenderTexture.active = null; // JC: added to avoid errors
             Destroy(rt);
             byte[] bytes = screenShot.EncodeToPNG();
             string filename = ScreenShotName(resWidth, resHeight);
             System.IO.File.WriteAllBytes(filename, bytes);
             Debug.Log(string.Format("Took screenshot to: {0}", filename));
             takeHiResShot = false;
         }
     }
 }