VirtualFramework/Assets/Scripts/UI/UIBody3DMouse.cs

137 lines
4.2 KiB
C#
Raw Normal View History

2025-02-19 16:33:28 +08:00
using UnityEngine;
using UnityEngine.UI;
using QFramework;
using System;
namespace QFramework.Example
{
public class UIBody3DMouseData : UIPanelData
{
}
public partial class UIBody3DMouse : UIPanel
{
UIDragItem dragItem;
2025-02-19 17:23:39 +08:00
private GameObject currentHitObject; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
private bool isObjectHit; // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B1BB><EFBFBD><EFBFBD>
2025-02-19 16:33:28 +08:00
protected override void OnInit(IUIData uiData = null)
{
2025-03-11 10:33:07 +08:00
TypeEventSystem.Global.Register<OnModuleQuit>(OnModuleQuithandler).UnRegisterWhenGameObjectDestroyed(this);
2025-02-19 16:33:28 +08:00
mData = uiData as UIBody3DMouseData ?? new UIBody3DMouseData();
dragItem = Content.GetComponent<UIDragItem>();
SelectBtn.onClick.AddListener(() =>
{
2025-02-19 17:23:39 +08:00
if (currentHitObject != null)
{
var item = currentHitObject.GetComponent<Body3DOjbItem>();
if (item != null)
{
item.objToggle.OnValueChanged.Invoke(!item.objToggle.isOn);
}
}
2025-02-19 16:33:28 +08:00
});
}
2025-03-11 10:33:07 +08:00
private void OnModuleQuithandler(OnModuleQuit quit)
{
Hide();
}
2025-02-19 16:33:28 +08:00
private void OnEndDrag()
{
Show3DCamera.instance.lockMove = false;
}
private void OnBeginDrag()
{
Show3DCamera.instance.lockMove = true;
}
protected override void OnOpen(IUIData uiData = null)
{
dragItem?.OnBeginDragEvent.AddListener(OnBeginDrag);
dragItem?.OnEndDragEvent.AddListener(OnEndDrag);
}
private void Update()
{
if (Point != null && Camera.main != null)
{
2025-02-19 17:23:39 +08:00
// <20><>ȡ Image <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
2025-02-19 16:33:28 +08:00
Vector2 imageCenter = new Vector2(Point.rectTransform.position.x, Point.rectTransform.position.y);
// <20><><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
Ray ray = Camera.main.ScreenPointToRay(imageCenter);
RaycastHit hit;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>
if (Physics.Raycast(ray, out hit))
{
2025-02-19 17:23:39 +08:00
GameObject hitObject = hit.collider.gameObject;
if (!isObjectHit)
{
// <20><><EFBFBD><EFBFBD><EFBFBD>״ν<D7B4><CEBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
currentHitObject = hitObject;
isObjectHit = true;
Debug.Log("<22><><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: " + hitObject.name);
OnEnterBody(currentHitObject);
}
else if (currentHitObject != hitObject)
{
// <20><><EFBFBD>ߴ<EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>: " + currentHitObject.name);
OnExitBody(currentHitObject);
currentHitObject = hitObject;
OnEnterBody(currentHitObject);
Debug.Log("<22><><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: " + hitObject.name);
}
}
else
{
if (isObjectHit)
{
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
OnExitBody(currentHitObject);
Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>: " + currentHitObject.name);
currentHitObject = null;
isObjectHit = false;
}
2025-02-19 16:33:28 +08:00
}
}
2025-02-19 17:23:39 +08:00
2025-02-19 16:33:28 +08:00
}
2025-02-19 17:23:39 +08:00
void OnEnterBody(GameObject obj)
{
if (obj != null)
{
var bodyItem = currentHitObject.GetComponent<Body3DOjbItem>();
if (bodyItem != null)
{
BodyName.text = bodyItem.body.Name;
BodyName.gameObject.SetActive(true);
}
}
}
void OnExitBody(GameObject obj)
{
BodyName.gameObject.SetActive(false);
}
2025-02-19 16:33:28 +08:00
protected override void OnShow()
{
}
protected override void OnHide()
{
dragItem?.OnBeginDragEvent.RemoveListener(OnBeginDrag);
dragItem?.OnEndDragEvent.RemoveListener(OnEndDrag);
}
protected override void OnClose()
{
}
}
}