using System.Linq; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class hintUI : MonoBehaviour, IPointerEnterHandler, IPointerDownHandler, IPointerExitHandler, IPointerUpHandler { [HideInInspector] public Manager manager; public bool isGreen = true; public Image[] img; [HideInInspector] private GameObject hintObj; public GameObject go; [SerializeField] private string t; //RectTransform rectTransform; public void Start() { if (img.Length != 2) img = this.GetComponentsInChildren(); OnGreen(img, 0); manager = GameObject.Find("Manager").GetComponent(); //rectTransform = GetComponent(); //t = "Внешний вид"; } private void OnGreen(Image[] img, int k=-1) { //if(img.Length != 2) // img = this.GetComponentsInChildren(); for (var i = 0; i < img.Length; i++) { if(img[i].color != Color.gray) img[i].color = (isGreen) ? Color.green : Color.white; if(k >= 0 && i != k) img[i].gameObject.SetActive(false); } if(k >= 0 && k < img.Length) img[k].gameObject.SetActive(true); } public void OnPointerUp(PointerEventData eventData) { OnGreen(img); } public void OnPointerEnter(PointerEventData eventData) { OnGreen(img, 1); var h = GameObject.Find("hintContainer"); if (h != null) { Destroy(h); } hintObj = OnHint(this.gameObject, go, t); } public GameObject OnHint(GameObject btn, GameObject objGo, string t) { Vector2 hintPos = new Vector2(btn.transform.localPosition.x + 15, btn.transform.localPosition.y + 55);//позиция хинта GameObject hint = Instantiate(objGo, btn.transform.parent);//создание хинта hint.name = "hintContainer"; hint.transform.localPosition = hintPos;//позиция хинта устанавливаем var hintBase = hint.GetComponentInChildren(); Text txt = hint.GetComponentInChildren(); txt.text = t; var s = txt.text.Length; //Debug.Log($"s = {s}"); RectTransform rectTransformText = txt.GetComponent(); rectTransformText.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, s * 10 + 20); RectTransform rectTransformBase = hintBase.GetComponent(); rectTransformBase.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, rectTransformText.rect.width + 35); if ((rectTransformBase.rect.width + hintBase.transform.position.x) > Screen.width) { hint.transform.localPosition = new Vector2(hint.transform.localPosition.x - rectTransformBase.rect.width/2 - 20, hint.transform.localPosition.y); var hintTr = hint.transform.GetChild(1).GetComponent(); hintTr.transform.localPosition = new Vector2(hintTr.transform.localPosition.x + rectTransformBase.rect.width/2 + 15, hintTr.transform.localPosition.y); //Debug.Log($"hintTr.name = {hintTr.name}"); } return hint; } public void OnPointerDown(PointerEventData eventData) { isGreen = true; OnParentGreenOff(); OnGreen(img); } public void OnPointerExit(PointerEventData eventData) { OnGreen(img, 0); Destroy(hintObj); } void OnParentGreenOff() { var btn = gameObject.transform.parent.GetComponentsInChildren(); for(var i=0; i