123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- using UnityEngine;
- using UnityEngine.UI;
- using QFramework;
- using ChivaXR;
- using ChivaXR.Op;
- namespace QFramework
- {
- public class CameraPoseSetPanelData : UIPanelData
- {
- }
- public partial class CameraPoseSetPanel : UIPanel
- {
- StepListProxy m_StepListProxy;
- bool m_CameraState;
- protected override void OnInit(IUIData uiData = null)
- {
- mData = uiData as CameraPoseSetPanelData ?? new CameraPoseSetPanelData();
- // please add init code here
- m_StepListProxy = DAL.Instance.Get<StepListProxy>();
- NextBtn.onClick.AddListener(OnNextBtnClick);
- PreviousBtn.onClick.AddListener(OnPreviousBtnClick);
- AutoSettingCamera.onClick.AddListener(OnAutoSettingView);
- SaveCameraPose.onClick.AddListener(OnSaveCameraPoseBtnClick);
- SaveBtn.onClick.AddListener(OnSaveBtnClick);
- }
- //启动时记录当前状态
- private bool recordautoEnterNextProcessState;
- //启动时记录当前播放
- private bool recordplayView;
- protected override void OnOpen(IUIData uiData = null)
- {
- m_CameraState = RoamCameraController.Instance.toggle;
- RoamCameraController.Instance.SetCameraMoveState(true);
- recordautoEnterNextProcessState = ProcessManagement.Instance.autoEnterNextProcess;
- recordplayView = Preprocess_VoiceAndCamera.playView;
- Preprocess_VoiceAndCamera.playView = true;
- ProcessManagement.Instance.autoEnterNextProcess = false;
- Info.text = "";
- }
- protected override void OnShow()
- {
- }
- protected override void OnHide()
- {
- }
- protected override void OnClose()
- {
- RoamCameraController.Instance.toggle = m_CameraState;
- ProcessManagement.Instance.autoEnterNextProcess = recordautoEnterNextProcessState;
- Preprocess_VoiceAndCamera.playView = recordplayView;
- }
- private void OnNextBtnClick()
- {
- Info.text = "";
- ProcessManagement.Instance.JumpProcessState(ProcessManagement.Instance.currentStepID + 1);
- ProcessManagement.Instance.ActiveCurrentProcess();
- }
- private void OnPreviousBtnClick()
- {
- Info.text = "";
- ProcessManagement.Instance.JumpProcessState(ProcessManagement.Instance.currentStepID - 1);
- ProcessManagement.Instance.ActiveCurrentProcess();
- }
- private void OnSaveCameraPoseBtnClick()
- {
- m_StepListProxy.SetOperationCameraPoseById(ProcessManagement.Instance.currentStepID, RoamCameraController.Instance.transform.position,
- RoamCameraController.Instance.transform.eulerAngles);
- Info.text = "设置第" + ProcessManagement.Instance.currentStepID + "步,镜头信息:" + RoamCameraController.Instance.transform.position + "/" + RoamCameraController.Instance.transform.eulerAngles;
- }
- private void OnSaveBtnClick()
- {
- m_StepListProxy.SaveOperation();
- UIKit.ClosePanel<CameraPoseSetPanel>();
- }
- public void OnAutoSettingView()
- {
- PB_OpData pbOpData = ProcessManagement.Instance.GetCurrentProcess().GetComponent<PB_OpData>();
- OpTrigger_ToolPack opTrigger_ToolPack =
- OperationManager.Instance.GetOpData(pbOpData.opData.operationDataName).gameObject.GetComponent<OpTrigger_ToolPack>();
- if (opTrigger_ToolPack != null)
- {
- if (opTrigger_ToolPack.targetObjs.Count > 0)
- {
- Transform viewTarget = opTrigger_ToolPack.targetObjs[0].transform;
- Transform targetPoint = opTrigger_ToolPack.targetObjs[0].transform.GetComponentInChildren<MeshRenderer>().transform;
- Bounds bound = GetBounds(targetPoint);
- Vector3 targetPos = bound.center +
- (bound.center - new Vector3(0, bound.center.y - 0.3f, 0)).normalized
- * (bound.size.magnitude < 0.8f ? 0.8f : bound.size.magnitude);
- Vector3 euler = Quaternion.LookRotation(bound.center - targetPos, Vector3.up).eulerAngles;
- RoamCameraController.Instance.SetCameraState(targetPos, euler);
- }
- }
- }
- Vector3 GetEulerAnglesFromVectors(Vector3 forward, Vector3 up)
- {
- // 确保向量都被归一化了
- forward.Normalize();
- up.Normalize();
- // 右向量通过向上向量和前向量的叉乘得到
- Vector3 right = Vector3.Cross(up, forward);
- // 通过右向量和前向量得到旋转
- float roll = Mathf.Atan2(right.x, right.z) * Mathf.Rad2Deg;
- float pitch = Mathf.Asin(right.y) * Mathf.Rad2Deg;
- float yaw = Mathf.Atan2(up.x, up.z) * Mathf.Rad2Deg;
- return new Vector3(yaw, pitch, roll);
- }
- /// <summary>
- /// 获取Transform及其子级的包围盒(MeshRenderer),若MeshRenderer包围盒长度为0,则获取BoxCollider包围盒
- /// </summary>
- /// <param name="transform"></param>
- /// <returns></returns>
- private static Bounds GetBounds(Transform transform)
- {
- Quaternion oldRotation = Quaternion.identity;
- bool boundsInitialized = false;
- //Bounds bounds = new Bounds(transform.position, Vector3.zero);
- Bounds bounds = new Bounds();
- Renderer[] renderers = transform.GetComponentsInChildren<Renderer>();
- foreach (Renderer renderer in renderers)
- {
- if (!boundsInitialized)
- {
- bounds = new Bounds(renderer.transform.position, Vector3.zero);
- boundsInitialized = true;
- }
- bounds.Encapsulate(renderer.bounds);
- }
- if (bounds.size.magnitude == 0)
- {
- BoxCollider[] colliders = transform.GetComponentsInChildren<BoxCollider>();
- foreach (BoxCollider collider in colliders)
- {
- if (!boundsInitialized)
- {
- bounds = new Bounds(collider.transform.position, Vector3.zero);
- boundsInitialized = true;
- }
- bounds.Encapsulate(collider.bounds);
- }
- }
- return bounds;
- }
- }
- }
|