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-03-17 14:51:03 +08:00
|
|
|
|
Vector2 imageCenter = new Vector2(Point.position.x, Point.position.y);
|
2025-02-19 16:33:28 +08:00
|
|
|
|
|
|
|
|
|
|
// <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;
|
|
|
|
|
|
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>
|
|
|
|
|
|
OnExitBody(currentHitObject);
|
|
|
|
|
|
currentHitObject = hitObject;
|
|
|
|
|
|
OnEnterBody(currentHitObject);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (isObjectHit)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
|
|
|
|
|
OnExitBody(currentHitObject);
|
|
|
|
|
|
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);
|
2025-03-17 14:51:03 +08:00
|
|
|
|
currentHitObject.GetComponent<ObjectColorToggle>()?.OnHover(true);
|
2025-02-19 17:23:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
void OnExitBody(GameObject obj)
|
|
|
|
|
|
{
|
|
|
|
|
|
BodyName.gameObject.SetActive(false);
|
2025-03-17 14:51:03 +08:00
|
|
|
|
if (currentHitObject != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
currentHitObject.GetComponent<ObjectColorToggle>()?.OnHover(false);
|
|
|
|
|
|
}
|
2025-02-19 17:23:39 +08:00
|
|
|
|
}
|
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()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|