У меня есть код меню выбора:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SelectionMenu : MonoBehaviour
{
public List<MenuButton> buttons = new List<MenuButton>();
public GameObject canvas;
private Vector2 Mouseposition;
private Vector2 fromVector2M = new Vector2(0.5f, 1.0f);
private Vector2 centercircle = new Vector2(0.5f, 0.5f);
private Vector2 toVector2M;
public int menuItems;
public int CurMenuItem;
private int OldMenuItem;
private bool isDone = false;
// Start is called before the first frame update
void Start()
{
canvas.SetActive(false);
menuItems = buttons.Count;
foreach (MenuButton button in buttons)
{
button.sceneImage.color = button.NormalColor;
}
CurMenuItem = 0;
}
// Update is called once per frame
void Update()
{
GetCurrentMenuItem();
if (Input.GetButtonDown("Fire1"))
ButtonAction();
if (Input.GetKey(KeyCode.Mouse1) && !isDone)
{
canvas.SetActive(true);
CrossHair.ok = true;
}
else
{
canvas.SetActive(false);
CrossHair.ok = false;
}
if (Input.GetKeyUp(KeyCode.Mouse1))
{
isDone = false;
}
}
public void GetCurrentMenuItem()
{
Mouseposition = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
toVector2M = new Vector2(Mouseposition.x / Screen.width, Mouseposition.y / Screen.height);
float angle = (Mathf.Atan2(fromVector2M.y - centercircle.y, fromVector2M.x - centercircle.x) - Mathf.Atan2(toVector2M.y - centercircle.y, toVector2M.x - centercircle.x)) * Mathf.Rad2Deg;
if (angle < 0)
angle += 360;
CurMenuItem = (int)(angle / (360 / menuItems));
if(CurMenuItem != OldMenuItem)
{
buttons[OldMenuItem].sceneImage.color = buttons[OldMenuItem].NormalColor;
RectTransform oldTrans = buttons[OldMenuItem].sceneImage.gameObject.GetComponent<RectTransform>();
oldTrans.sizeDelta = new Vector3(250, 250);
Debug.Log("Resized: " + buttons[OldMenuItem].name);
OldMenuItem = CurMenuItem;
buttons[CurMenuItem].sceneImage.color = buttons[CurMenuItem].HighlightedColor;
RectTransform newTrans = buttons[CurMenuItem].sceneImage.gameObject.GetComponent<RectTransform>();
oldTrans.sizeDelta = new Vector3(280, 280);
}
}
public void ButtonAction()
{
buttons[CurMenuItem].sceneImage.color = buttons[CurMenuItem].PressedColor;
if(CurMenuItem == 0)
{
SetColor.color = buttons[CurMenuItem].HighlightedColor;
}
isDone = true;
}
}
[System.Serializable]
public class MenuButton
{
public string name;
public Image sceneImage;
public Color NormalColor = Color.white;
public Color HighlightedColor = Color.grey;
public Color PressedColor = Color.gray;
}
Все работает, как задумано, кроме одного: масштабирование не работает, как задумано. Эта строка:
oldTrans.sizeDelta = new Vector3(280, 280);
эта строка запускается только после того, как я оставляю выделенный выбор (menuItem / Button)
а не когда начинается подсветка. Это странно, потому что за одну строку до этого я установил кнопку, которая будет выделена, и эта строка не будет работать до тех пор, пока она больше не будет выделена. также эта строка:
oldTrans.sizeDelta = new Vector3(250, 250);
не работает вообще. Debug.Log, который появляется сразу после этой строки, регистрируется каждый раз.