【问题标题】:Unity3D C# positioning of panel after instantiation实例化后面板的Unity3D C#定位
【发布时间】:2017-07-02 23:52:35
【问题描述】:

我正在实例化一个 GO,它有一个面板组件 (RectTransform) 作为场景中现有画布的子组件:

_heroSelectUI = (GameObject)Instantiate (_heroSelectUIPrefab, GameObject.Find ("Canvas").GetComponent<Transform>());

当它被创建时,它会获得以下值:

“Left”、“Top”、“Right”和“Bottom”得到一些不需要的值(可能是由于现有画布似乎具有相同的值)。

面板prefabs值为0,实例化后如何将它们设置回0?我找不到适合 RectTransform 的变量。

【问题讨论】:

    标签: c# unity3d transform panel rect


    【解决方案1】:

    根据documentation

    对于拉伸矩形变换,使用 offsetMin 和 offsetMax 属性设置位置会更简单。 offsetMin 属性指定矩形左下角相对于左下锚点的角。 offsetMax 属性指定矩形的右上角相对于右上角锚点的角。

    尝试如下操作:

    RectTransform rt = _heroSelectUI.GetComponent<RectTransform>();
    rt.offsetMin = rt.offsetMax = Vector2.zero ;
    

    否则,根据文档,您可以在设置父级时尝试这样做:

    UI 元素的预制件使用 Instantiate 方法正常实例化。设置实例化 UI 元素的父级时,建议使用 Transform.SetParent 方法,将 worldPositionStays 参数设置为 false。

    _heroSelectUI = (GameObject)Instantiate (_heroSelectUIPrefab, GameObject.Find ("Canvas").GetComponent<RectTransform>(), false);
    

    或:

    _heroSelectUI = (GameObject)Instantiate (_heroSelectUIPrefab );
    _heroSelectUI.GetComponent<Transform>().SetParent( GameObject.Find ("Canvas").GetComponent<RectTransform>(), false ) ;
    

    【讨论】:

    • 哦,是的,我一直在为我的按钮设置为 false,但也没有考虑在面板上这样做!它也完成了这项工作,并将 worldPositionStays 设置为 false。
    猜你喜欢
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多