CultivationOfBrewing-2/Assets/Scripts/RawImageScript.cs

112 lines
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using HighlightPlus;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class RawImageScript : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerMoveHandler
{
//正常植株和病株对比面板
public UI_GraphicRextualPanel rextualPanel;
public RawImage targetRawImage;
HighlightEffect _highlight = null;
public void OnPointerEnter(PointerEventData eventData)
{
}
public void OnPointerMove(PointerEventData eventData)
{
GameObject hoveredObject = eventData.pointerEnter;
RawImage rawImage = this.GetComponent<RawImage>();
// 步骤1转换为RawImage局部坐标
RectTransformUtility.ScreenPointToLocalPointInRectangle(
targetRawImage.rectTransform,
Input.mousePosition,
null,
out Vector2 localPos);
Vector2 uv = CalculateUV(localPos);
if (uv.x < 0 || uv.x > 1 || uv.y < 0 || uv.y > 1) return;
Camera renderCamera = null;
int layerMask = 0;
if (hoveredObject.name == "正常高粱RawImage")
{
Debug.Log("我进正常高粱了");
renderCamera = GameObject.Find("Camera_Normal").GetComponent<Camera>();
layerMask = 1 << LayerMask.NameToLayer("Split_Normal");
// 步骤3生成射线
}
else if (hoveredObject.name == "病株RawImage")
{
Debug.Log("我进病株了");
renderCamera = GameObject.Find("Camera_Disease").GetComponent<Camera>();
layerMask = 1 << LayerMask.NameToLayer("Split_Disease");
}
else
{
renderCamera = Camera.main;
layerMask = 1 << LayerMask.NameToLayer("Default");
}
Ray ray = renderCamera.ViewportPointToRay(uv);
if (Physics.Raycast(ray, out RaycastHit hit,
renderCamera.farClipPlane,
layerMask))
{
Debug.Log($"选中物体:{hit.collider.name}", hit.collider.gameObject);
if (_highlight != null)
{
_highlight.SetHighlighted(false);
_highlight = null;
}
_highlight = hit.collider.gameObject.GetComponent<HighlightEffect>();
if (_highlight != null)
{
_highlight.SetHighlighted(true);
rextualPanel.showPlantPartOnRawImage(hit.collider.gameObject);
}
}
else
{
if (_highlight != null)
{
_highlight.SetHighlighted(false);
_highlight = null;
}
}
}
public void OnPointerExit(PointerEventData eventData)
{
GameObject hoveredObject = eventData.pointerEnter;
if (hoveredObject.name == "正常高粱")
{
Debug.Log("我退出正常了");
}
else if (hoveredObject.name == "病株")
{
Debug.Log("我退出病株了");
}
}
private Vector2 CalculateUV(Vector2 localPos)
{
Rect rect = targetRawImage.rectTransform.rect;
// 处理不同锚点模式
Vector2 pivot = targetRawImage.rectTransform.pivot;
Vector2 offset = new Vector2(
localPos.x + rect.width * pivot.x,
localPos.y + rect.height * pivot.y
);
return new Vector2(
offset.x / rect.width,
offset.y / rect.height
);
}
}