CultivationOfBrewing-2/Assets/Scripts/RawImageScript_SC.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_SC : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerMoveHandler
{
//正常植株和病株对比面板
public UI_PlantComparisonPanel 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
);
}
}