109 lines
3.2 KiB
C#
109 lines
3.2 KiB
C#
using System;
|
|
using Sirenix.OdinInspector;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace AlicizaX.UI.Extension
|
|
{
|
|
[RequireComponent(typeof(RawImage))]
|
|
public class UI3DDisplay : MonoBehaviour
|
|
{
|
|
private Camera m_Camera;
|
|
private GameObject m_ShowObject;
|
|
private RenderTexture m_ShowTexure;
|
|
private UI3DDisplayTouch m_UI3DDisplayTouch;
|
|
|
|
private RawImage m_ShowImage;
|
|
|
|
[ReadOnly]
|
|
[SerializeField]
|
|
private int m_ResolutionX = 512;
|
|
|
|
[SerializeField]
|
|
[ReadOnly]
|
|
private int m_ResolutionY = 512;
|
|
|
|
private readonly int m_RenderTextureDepthBuffer = 16;
|
|
|
|
void Awake()
|
|
{
|
|
m_ShowImage = GetComponent<RawImage>();
|
|
m_UI3DDisplayTouch = GetComponentInChildren<UI3DDisplayTouch>();
|
|
}
|
|
|
|
|
|
#if UNITY_EDITOR
|
|
|
|
|
|
[SerializeField] [Header("分辨率")] [OnValueChanged("OnEditResolutionChanged")]
|
|
private int EditResolution = 512;
|
|
|
|
private void OnEditResolutionChanged()
|
|
{
|
|
if (!getPlayingState) return;
|
|
m_ResolutionX = EditResolution;
|
|
m_ResolutionY = EditResolution;
|
|
var rect = transform.GetComponent<RectTransform>();
|
|
if (Math.Abs(rect.sizeDelta.x - m_ResolutionX) > 0.01f ||
|
|
Math.Abs(rect.sizeDelta.y - m_ResolutionY) > 0.01f)
|
|
rect.sizeDelta = new Vector2(m_ResolutionX, m_ResolutionY);
|
|
}
|
|
|
|
|
|
[ShowIf("getPlayingState")] [SerializeField]
|
|
GameObject previewPrefab;
|
|
|
|
[ShowIf("getPlayingState")] [SerializeField]
|
|
Camera previewCamera;
|
|
|
|
bool getPlayingState => !Application.isPlaying;
|
|
|
|
[Sirenix.OdinInspector.Button("预览")]
|
|
private void Preview()
|
|
{
|
|
if (m_ShowObject != null)
|
|
{
|
|
UnityEngine.Object.DestroyImmediate(m_ShowObject);
|
|
}
|
|
|
|
m_ShowObject = UnityEngine.Object.Instantiate(previewPrefab);
|
|
m_Camera = previewCamera;
|
|
if (m_ShowTexure != null)
|
|
{
|
|
RenderTexture.ReleaseTemporary(m_ShowTexure);
|
|
}
|
|
|
|
m_ShowTexure = RenderTexture.GetTemporary(m_ResolutionX, m_ResolutionY, m_RenderTextureDepthBuffer);
|
|
// m_ShowObject.SetLayerRecursively(LayerDefine.UI3DObject);
|
|
m_Camera.targetTexture = m_ShowTexure;
|
|
GetComponent<RawImage>().texture = m_ShowTexure;
|
|
}
|
|
#endif
|
|
|
|
public void SetUp(GameObject obj)
|
|
{
|
|
m_ShowObject = obj;
|
|
// m_Camera = CameraManaer.Instance.UI3DRenderCamera;
|
|
if (m_ShowTexure != null)
|
|
{
|
|
RenderTexture.ReleaseTemporary(m_ShowTexure);
|
|
}
|
|
|
|
m_ShowTexure = RenderTexture.GetTemporary(m_ResolutionX, m_ResolutionY, m_RenderTextureDepthBuffer);
|
|
// m_ShowObject.SetLayerRecursively(LayerDefine.UI3DObject);
|
|
m_Camera.targetTexture = m_ShowTexure;
|
|
m_ShowImage.texture = m_ShowTexure;
|
|
m_UI3DDisplayTouch.SetObject(m_ShowObject);
|
|
}
|
|
|
|
void OnDestroy()
|
|
{
|
|
m_UI3DDisplayTouch.Disopose();
|
|
if (m_ShowTexure != null)
|
|
{
|
|
RenderTexture.ReleaseTemporary(m_ShowTexure);
|
|
}
|
|
}
|
|
}
|
|
}
|