装备系统完结,修复并加入很多
This commit is contained in:
@@ -1,8 +1,134 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.EventSystems;
|
||||
|
||||
public class esPrefab : MonoBehaviour
|
||||
public class esPrefab : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
|
||||
{
|
||||
public Image esIcon;
|
||||
public Text esName;
|
||||
|
||||
private int skillGroupId;
|
||||
private GameObject descriptionPrefab;
|
||||
private RectTransform descriptionRoot;
|
||||
private GameObject spawnedDescription;
|
||||
private RectTransform rectTransform;
|
||||
private Canvas rootCanvas;
|
||||
private Camera uiCamera;
|
||||
private Vector2 descriptionOffset = new Vector2(20f, 30f);
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
rectTransform = transform as RectTransform;
|
||||
rootCanvas = GetComponentInParent<Canvas>();
|
||||
if (rootCanvas != null && rootCanvas.renderMode != RenderMode.ScreenSpaceOverlay)
|
||||
{
|
||||
uiCamera = rootCanvas.worldCamera;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
DestroyDescription();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
DestroyDescription();
|
||||
}
|
||||
|
||||
public void BindSkillGroup(int groupId, string displayName, Sprite icon, GameObject desPrefab, RectTransform ownerRoot, Vector2 offset)
|
||||
{
|
||||
skillGroupId = Mathf.Max(0, groupId);
|
||||
descriptionPrefab = desPrefab;
|
||||
descriptionRoot = ownerRoot;
|
||||
descriptionOffset = offset;
|
||||
|
||||
if (esName != null)
|
||||
{
|
||||
esName.text = displayName ?? string.Empty;
|
||||
}
|
||||
|
||||
if (esIcon != null)
|
||||
{
|
||||
esIcon.sprite = icon;
|
||||
esIcon.enabled = icon != null;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnPointerEnter(PointerEventData eventData)
|
||||
{
|
||||
ShowDescription();
|
||||
}
|
||||
|
||||
public void OnPointerExit(PointerEventData eventData)
|
||||
{
|
||||
DestroyDescription();
|
||||
}
|
||||
|
||||
private void ShowDescription()
|
||||
{
|
||||
if (spawnedDescription != null || descriptionPrefab == null || descriptionRoot == null || skillGroupId <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SkillGroup skillGroup = EquipmentSkillGroupLibrary.ResolveSkillGroup(skillGroupId);
|
||||
if (skillGroup == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
spawnedDescription = Instantiate(descriptionPrefab, descriptionRoot);
|
||||
spawnedDescription.SetActive(true);
|
||||
spawnedDescription.transform.SetAsLastSibling();
|
||||
|
||||
esDesPrefab description = spawnedDescription.GetComponent<esDesPrefab>();
|
||||
if (description != null)
|
||||
{
|
||||
description.Bind(skillGroup.groupName, skillGroup.groupIcon, skillGroup.skillDescriptionsText);
|
||||
}
|
||||
|
||||
PositionDescription(spawnedDescription.transform as RectTransform);
|
||||
}
|
||||
|
||||
private void PositionDescription(RectTransform descriptionRect)
|
||||
{
|
||||
if (descriptionRect == null || rectTransform == null || descriptionRoot == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Vector3[] corners = new Vector3[4];
|
||||
rectTransform.GetWorldCorners(corners);
|
||||
Vector3 rightCenterWorld = (corners[2] + corners[3]) * 0.5f;
|
||||
Vector2 screenPoint = RectTransformUtility.WorldToScreenPoint(uiCamera, rightCenterWorld);
|
||||
if (!RectTransformUtility.ScreenPointToLocalPointInRectangle(descriptionRoot, screenPoint, uiCamera, out Vector2 localPoint))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
descriptionRect.anchorMin = new Vector2(0f, 1f);
|
||||
descriptionRect.anchorMax = new Vector2(0f, 1f);
|
||||
descriptionRect.pivot = new Vector2(0f, 1f);
|
||||
descriptionRect.anchoredPosition = localPoint + descriptionOffset;
|
||||
}
|
||||
|
||||
private void DestroyDescription()
|
||||
{
|
||||
if (spawnedDescription == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (Application.isPlaying)
|
||||
{
|
||||
Destroy(spawnedDescription);
|
||||
}
|
||||
else
|
||||
{
|
||||
DestroyImmediate(spawnedDescription);
|
||||
}
|
||||
|
||||
spawnedDescription = null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user