完善鼠标功能
This commit is contained in:
parent
fa7ccb6aac
commit
10f624a776
@ -98,7 +98,7 @@ MonoBehaviour:
|
|||||||
m_SelectOnDown: {fileID: 0}
|
m_SelectOnDown: {fileID: 0}
|
||||||
m_SelectOnLeft: {fileID: 0}
|
m_SelectOnLeft: {fileID: 0}
|
||||||
m_SelectOnRight: {fileID: 0}
|
m_SelectOnRight: {fileID: 0}
|
||||||
m_Transition: 0
|
m_Transition: 1
|
||||||
m_Colors:
|
m_Colors:
|
||||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||||
|
|||||||
@ -10,7 +10,7 @@ public class Body3DOjbItem : MonoBehaviour
|
|||||||
{
|
{
|
||||||
public Body3D.Body body;
|
public Body3D.Body body;
|
||||||
|
|
||||||
ObjectToggle objToggle;
|
public ObjectToggle objToggle;
|
||||||
ObjDrag objDrag;
|
ObjDrag objDrag;
|
||||||
// 记录上一次鼠标按下的时间
|
// 记录上一次鼠标按下的时间
|
||||||
private float lastClickTime;
|
private float lastClickTime;
|
||||||
|
|||||||
@ -11,6 +11,8 @@ namespace QFramework.Example
|
|||||||
public partial class UIBody3DMouse : UIPanel
|
public partial class UIBody3DMouse : UIPanel
|
||||||
{
|
{
|
||||||
UIDragItem dragItem;
|
UIDragItem dragItem;
|
||||||
|
private GameObject currentHitObject; // 当前被击中的物体
|
||||||
|
private bool isObjectHit; // 标记是否有物体被击中
|
||||||
protected override void OnInit(IUIData uiData = null)
|
protected override void OnInit(IUIData uiData = null)
|
||||||
{
|
{
|
||||||
mData = uiData as UIBody3DMouseData ?? new UIBody3DMouseData();
|
mData = uiData as UIBody3DMouseData ?? new UIBody3DMouseData();
|
||||||
@ -18,7 +20,14 @@ namespace QFramework.Example
|
|||||||
|
|
||||||
SelectBtn.onClick.AddListener(() =>
|
SelectBtn.onClick.AddListener(() =>
|
||||||
{
|
{
|
||||||
|
if (currentHitObject != null)
|
||||||
|
{
|
||||||
|
var item = currentHitObject.GetComponent<Body3DOjbItem>();
|
||||||
|
if (item != null)
|
||||||
|
{
|
||||||
|
item.objToggle.OnValueChanged.Invoke(!item.objToggle.isOn);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,7 +51,7 @@ namespace QFramework.Example
|
|||||||
{
|
{
|
||||||
if (Point != null && Camera.main != null)
|
if (Point != null && Camera.main != null)
|
||||||
{
|
{
|
||||||
// 获取Image组件的中心点屏幕坐标
|
// 获取 Image 组件的中心点屏幕坐标
|
||||||
Vector2 imageCenter = new Vector2(Point.rectTransform.position.x, Point.rectTransform.position.y);
|
Vector2 imageCenter = new Vector2(Point.rectTransform.position.x, Point.rectTransform.position.y);
|
||||||
|
|
||||||
// 将屏幕坐标转换为射线
|
// 将屏幕坐标转换为射线
|
||||||
@ -52,12 +61,57 @@ namespace QFramework.Example
|
|||||||
// 进行射线检测
|
// 进行射线检测
|
||||||
if (Physics.Raycast(ray, out hit))
|
if (Physics.Raycast(ray, out hit))
|
||||||
{
|
{
|
||||||
// 打印被击中物体的名字
|
GameObject hitObject = hit.collider.gameObject;
|
||||||
Debug.LogError("击中的物体名字: " + hit.collider.gameObject.name);
|
|
||||||
|
if (!isObjectHit)
|
||||||
|
{
|
||||||
|
// 射线首次进入物体
|
||||||
|
currentHitObject = hitObject;
|
||||||
|
isObjectHit = true;
|
||||||
|
Debug.Log("射线进入物体: " + hitObject.name);
|
||||||
|
OnEnterBody(currentHitObject);
|
||||||
|
}
|
||||||
|
else if (currentHitObject != hitObject)
|
||||||
|
{
|
||||||
|
// 射线从之前的物体移除并击中了新物体
|
||||||
|
Debug.Log("射线移除物体: " + currentHitObject.name);
|
||||||
|
OnExitBody(currentHitObject);
|
||||||
|
currentHitObject = hitObject;
|
||||||
|
OnEnterBody(currentHitObject);
|
||||||
|
Debug.Log("射线进入物体: " + hitObject.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (isObjectHit)
|
||||||
|
{
|
||||||
|
// 射线移除当前物体
|
||||||
|
OnExitBody(currentHitObject);
|
||||||
|
Debug.Log("射线移除物体: " + currentHitObject.name);
|
||||||
|
currentHitObject = null;
|
||||||
|
isObjectHit = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnShow()
|
protected override void OnShow()
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user