mirror of
https://github.com/lllyasviel/YGOProUnity_V2.git
synced 2026-10-19 23:45:38 +08:00
104 lines
2.9 KiB
C#
104 lines
2.9 KiB
C#
//----------------------------------------------
|
|
// NGUI: Next-Gen UI kit
|
|
// Copyright © 2011-2015 Tasharen Entertainment
|
|
//----------------------------------------------
|
|
|
|
using UnityEngine;
|
|
using System.IO;
|
|
|
|
/// <summary>
|
|
/// This class contains NGUI's extensions to Unity Editor's functionality.
|
|
/// </summary>
|
|
|
|
public static class NGUIEditorExtensions
|
|
{
|
|
/// <summary>
|
|
/// Render the camera into a render texture. If the camera has a render texture assigned, it will be re-used.
|
|
/// If it doesn't, a new render texture will be created.
|
|
/// </summary>
|
|
|
|
static public RenderTexture RenderToTexture (this Camera cam, int width, int height)
|
|
{
|
|
// Render textures only work in Unity Pro
|
|
if (!UnityEditorInternal.InternalEditorUtility.HasPro()) return null;
|
|
|
|
RenderTexture rt = cam.targetTexture;
|
|
|
|
if (rt != null && (rt.width != width || rt.height != height))
|
|
NGUITools.DestroyImmediate(rt);
|
|
|
|
// Set up the render texture for the camera
|
|
if (rt == null)
|
|
{
|
|
rt = new RenderTexture(width, height, 1);
|
|
rt.hideFlags = HideFlags.HideAndDontSave;
|
|
rt.autoGenerateMips = false;
|
|
rt.format = RenderTextureFormat.ARGB32;
|
|
rt.filterMode = FilterMode.Trilinear;
|
|
rt.anisoLevel = 4;
|
|
}
|
|
cam.targetTexture = rt;
|
|
if (rt != null) cam.Render();
|
|
return rt;
|
|
}
|
|
|
|
/// <summary>
|
|
/// If the camera has a render texture, save its contents into the specified file using PNG image format.
|
|
/// </summary>
|
|
|
|
static public bool SaveRenderTextureAsPNG (this Camera cam, string filename)
|
|
{
|
|
// Render textures only work in Unity Pro
|
|
if (!UnityEditorInternal.InternalEditorUtility.HasPro()) return false;
|
|
|
|
RenderTexture rt = cam.targetTexture;
|
|
if (rt == null) return false;
|
|
|
|
// Read the render texture's contents into the 2D texture
|
|
RenderTexture.active = rt;
|
|
Texture2D tex = new Texture2D(rt.width, rt.height, TextureFormat.ARGB32, false);
|
|
tex.hideFlags = HideFlags.HideAndDontSave;
|
|
tex.ReadPixels(new Rect(0f, 0f, rt.width, rt.height), 0, 0);
|
|
tex.Apply();
|
|
RenderTexture.active = null;
|
|
|
|
try
|
|
{
|
|
// Save the contents into the specified PNG
|
|
byte[] bytes = tex.EncodeToPNG();
|
|
FileStream fs = File.OpenWrite(filename);
|
|
fs.Write(bytes, 0, bytes.Length);
|
|
fs.Close();
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
Debug.LogError(ex.Message);
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
NGUITools.DestroyImmediate(tex);
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
#if !UNITY_4_3 && !UNITY_4_5 && !UNITY_4_6
|
|
// Unity 5 bug fix. Source: http://www.tasharen.com/forum/index.php?topic=13231.0
|
|
internal class Unity5DynamicLabelWorkAround : UnityEditor.AssetModificationProcessor
|
|
{
|
|
static string[] OnWillSaveAssets (string[] paths)
|
|
{
|
|
foreach (var path in paths)
|
|
{
|
|
if (path == UnityEditor.EditorApplication.currentScene)
|
|
{
|
|
UILabel[] labels = Object.FindObjectsOfType<UILabel>();
|
|
for (int i = 0, imax = labels.Length; i < imax; ++i) labels[i].MarkAsChanged();
|
|
}
|
|
}
|
|
return paths;
|
|
}
|
|
}
|
|
#endif
|