RectTransform.deltaSize не работает в Unity - PullRequest
0 голосов
/ 09 июля 2019

У меня есть код меню выбора:

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, который появляется сразу после этой строки, регистрируется каждый раз.

1 Ответ

2 голосов
/ 09 июля 2019

Вы не можете изменить sizeDelta напрямую

sizeDelta говорит вам, насколько больше или меньше это RectTransform относительно своего родителя. Чтобы изменить это, вы должны изменить якоря. Если вы пытаетесь установить для RectTransform размер, основанный на его содержимом, то, возможно, SetSizeWithCurrentAnchors() - это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...