uGUI动态加载控件位置错误(转自:https://www.cnblogs.com/mezero/p/4542939.html)

最近在使用uGUI时遇到了一个问题,在此记录一下。
在Canvas的Render Mode设置为Screen Space-Overlay模式时,动态加载控件是不会发生问题的。但是在Screen Space-Camera模式下,动态加载的控件位置及缩放会有很大的偏差。

复制代码
private Canvas canvas;
// Use this for initialization
void Start () 
{
   canvas = GameObject.FindObjectOfType<Canvas>();
   GameObject button = GameObject.Instantiate(Resources.Load("UI/Button")) as GameObject;
   button.transform.parent = canvas.transform;
} 
复制代码

运行结果:

看不清就对了,因为放大了66倍...

本来心想查看源码,查找问题的原因,尼玛在 bitbucket上的官方库里找半天没找到Canvas的源码,后来仔细一看原来Canvas是UnityEngine.dll下的。一定是逗我...说好的,开源呢...

无耐求助于万能的Google,终于找到了这个uGui alignment is wrong when adding prefabs to canvas

复制代码
private Canvas canvas;
// Use this for initialization
void Start () 
{
    canvas = GameObject.FindObjectOfType<Canvas>();
    GameObject button = GameObject.Instantiate(Resources.Load("UI/Button")) as GameObject;
    //button.transform.parent = canvas.transform;
    button.transform.SetParent(canvas.transform,false);//不受父节点的影响,保持原局部坐标和缩放
}
复制代码

就是这样。

物有所不足,智有所不明。

转载于:https://www.cnblogs.com/hackerl/p/8586147.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NullReferenceException: Object reference not set to an instance of an object Inventory.OnClickPickUp () (at Assets/Script/Inventory.cs:39) UnityEngine.Events.InvokableCall.Invoke () (at <ff7b004c24954ff98f68a709be4708c3>:0) UnityEngine.Events.UnityEvent.Invoke () (at <ff7b004c24954ff98f68a709be4708c3>:0) UnityEngine.UI.Button.Press () (at D:/Program Files/Unity/Hub/Editor/2019.4.14f1c1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/Button.cs:68) UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at D:/Program Files/Unity/Hub/Editor/2019.4.14f1c1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/UI/Core/Button.cs:110) UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at D:/Program Files/Unity/Hub/Editor/2019.4.14f1c1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/EventSystem/ExecuteEvents.cs:50) UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at D:/Program Files/Unity/Hub/Editor/2019.4.14f1c1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/EventSystem/ExecuteEvents.cs:261) UnityEngine.EventSystems.EventSystem:Update() (at D:/Program Files/Unity/Hub/Editor/2019.4.14f1c1/Editor/Data/Resources/PackageManager/BuiltInPackages/com.unity.ugui/Runtime/EventSystem/EventSystem.cs:377)
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值