Version: 2017.3

ILayoutSelfController

interface in UnityEngine.UI


实现接口:ILayoutController

切换到手册

描述

ILayoutSelfController 是应驱动其自己的 RectTransform 的 ILayoutController。

iLayoutSelfController 派生自基控制器 ILayoutController,控制 RectTransform 的布局。

使用 ILayoutSelfController 可操作 GameObject 自己的 RectTransform 组件(在 Inspector 中附加)。使用 ILayoutGroup 可操作属于 GameObject 的子项的 RectTransform。

调用 ILayoutController.SetLayoutHorizontal 可处理布局的水平部分,调用 ILayoutController.SetLayoutVertical 可处理垂直部分。 可以更改 RectTransform 的高度、宽度、位置和旋转。

//This script shows how the GameObject’s own RectTransforms can be changed.
//This creates a rectangle on the screen of the scale, positition and rotation you define in the Inspector.
//Make sure to set the X and Y scale to be more than 0 to see it

using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems;

public class Example : UIBehaviour, ILayoutSelfController { //Fields in the inspector used to manipulate the RectTransform public Vector3 m_Position; public Vector3 m_Rotation; public Vector2 m_Scale;

//This handles horizontal aspects of the layout (derived from ILayoutController) public virtual void SetLayoutHorizontal() { //Move and Rotate the RectTransform appropriately UpdateRectTransform(); }

//This handles vertical aspects of the layout public virtual void SetLayoutVertical() { //Move and Rotate the RectTransform appropriately UpdateRectTransform(); }

//This tells when there is a change in the inspector #if UNITY_EDITOR protected override void OnValidate() { Debug.Log("Validate"); //Update the RectTransform position, rotation and scale UpdateRectTransform(); }

#endif

//This tells when there has been a change to the RectTransform's settings in the inspector protected override void OnRectTransformDimensionsChange() { //Update the RectTransform position, rotation and scale UpdateRectTransform(); }

void UpdateRectTransform() { //Fetch the RectTransform from the GameObject RectTransform rectTransform = GetComponent<RectTransform>();

//Change the scale of the RectTransform using the fields in the inspector rectTransform.localScale = new Vector3(m_Scale.x, m_Scale.y, 0);

//Change the position and rotation of the RectTransform rectTransform.SetPositionAndRotation(m_Position, Quaternion.Euler(m_Rotation)); } }