This commit is contained in:
陈思海 2025-04-11 19:57:34 +08:00
parent 9feba7e69f
commit 7f216dc694
2 changed files with 163 additions and 164 deletions

View File

@ -1,55 +1,55 @@
// using UnityEngine;
// using UnityEngine.EventSystems;
//
// namespace AlicizaX.UI.Extension
// {
// public class UI3DDisplayTouch : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler
// {
// private GameObject m_dragObject;
// private bool m_CanDrag = true;
// private float m_DragSpeed = 20.0f;
// private float m_DragRotation;
// private Vector3 m_ShowRotation = Vector3.zero;
// private Transform view;
//
// public void SetObject(GameObject obj)
// {
// m_dragObject = obj;
// m_ShowRotation = obj.transform.eulerAngles;
// view = obj.GetComponent<Transform>();
// }
//
// public void Disopose()
// {
// m_dragObject = null;
// view = null;
// }
//
// //拖拽
// public void OnDrag(PointerEventData eventData)
// {
// if (!m_CanDrag) return;
// if (!view) return;
// if (!m_dragObject || !(m_DragSpeed > 0.0f)) return;
//
// var delta = eventData.delta.x;
// var deltaRot = -m_DragSpeed * delta * Time.deltaTime;
//
// m_DragRotation += deltaRot;
// var showRotation = Quaternion.Euler(m_ShowRotation);
// var showUp = showRotation * Vector3.up;
// showRotation *= Quaternion.AngleAxis(m_DragRotation, showUp);
// view.rotation = showRotation;
// }
//
// //按下
// public void OnPointerDown(PointerEventData eventData)
// {
// }
//
// //抬起
// public void OnPointerUp(PointerEventData eventData)
// {
// }
// }
// }
using UnityEngine;
using UnityEngine.EventSystems;
namespace AlicizaX.UI.Extension
{
public class UI3DDisplayTouch : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler
{
private GameObject m_dragObject;
private bool m_CanDrag = true;
private float m_DragSpeed = 20.0f;
private float m_DragRotation;
private Vector3 m_ShowRotation = Vector3.zero;
private Transform view;
public void SetObject(GameObject obj)
{
m_dragObject = obj;
m_ShowRotation = obj.transform.eulerAngles;
view = obj.GetComponent<Transform>();
}
public void Disopose()
{
m_dragObject = null;
view = null;
}
//拖拽
public void OnDrag(PointerEventData eventData)
{
if (!m_CanDrag) return;
if (!view) return;
if (!m_dragObject || !(m_DragSpeed > 0.0f)) return;
var delta = eventData.delta.x;
var deltaRot = -m_DragSpeed * delta * Time.deltaTime;
m_DragRotation += deltaRot;
var showRotation = Quaternion.Euler(m_ShowRotation);
var showUp = showRotation * Vector3.up;
showRotation *= Quaternion.AngleAxis(m_DragRotation, showUp);
view.rotation = showRotation;
}
//按下
public void OnPointerDown(PointerEventData eventData)
{
}
//抬起
public void OnPointerUp(PointerEventData eventData)
{
}
}
}

View File

@ -1,109 +1,108 @@
// 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()
// {
// UI3DDisplayHelper.UI3DDisplayHandler = this;
// 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);
// }
// }
// }
// }
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);
}
}
}
}