unity3d UGUI动态创建窗口获取窗口大小的问题

    private IEnumerator RefreshProcess(Vector2 worldPosition)
    {
        this.Renders();
        yield return null;
        yield return null;
        mRootWidth = (mRoot as RectTransform).rect.width;
        mrootHeigh = (mRoot as RectTransform).rect.height;
        mRoot.gameObject.SetActive(false);
        this.SelfAdaption(worldPosition);
    }

获得窗体正确的大小需注意一下几点:

1、在UGUI中,获取窗体的大小使用

        mRootWidth = (mRoot as RectTransform).rect.width;
        mrootHeigh = (mRoot as RectTransform).rect.height;

2、该窗体gameobject的需处于激活状态,即可见状态。

3、若是使用代码动态创建窗体,里面包含AutoLayout自动布局等组件,在创建的同一帧中是获取不到窗体大小的。

4、等待一帧后,发现获取到的窗体大小有误,再等待一帧后数据正常(不知道什么原因),所以如上所示我等待了2帧(谁知道原因,麻烦告知一下)。

若有不对,望指正。

时间: 2024-10-29 19:10:16

unity3d UGUI动态创建窗口获取窗口大小的问题的相关文章

动态创建窗口,并重写窗口过程

在窗口过程中处理滚动条消息 WNDPROC pSubclassOldEditProc; INT iVScrollPos = 0, iVTextPos = 0; LRESULT winProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { //获取新设置的窗口属性,就是获取CNewEdit的指针,方便后面访问m_lOldProc这个成员 if (message == WM_VSCROLL) { //TRACE( _T("%d\n&

Unity3D基础--动态创建和设置游戏对象

转载自原文:http://m.blog.csdn.net/blog/smbroe/43488627 1.如何动态创建对象:调用GameObject的CreatePrimitive方法可以按模型进行创建,PrimitiveType中可选的模型有,Cube(立方体),Sphere(球体),Capsule(胶囊),Plane(平原),Cylinder(圆柱):创建出的对象不需要Add之类的就可以显示出来 GameObject cubeObject = GameObject.CreatePrimitiv

Unity3D动态创建地形网格(一)

最近一直都在搞flash3D,好像有点对不起Unity3D的朋友们了.这次简单的写一个动态创建地形网格的脚本给大家分享一下. 这次是第一部分,仅仅实现了通过高度图动态生成地形的部分.假如以后有心情和时间,再来慢慢的补充多通道刷地形材质.动态刷地形和保存高度图等的功能吧.以前我都不喜欢公开脚本源码,都是一个个部分的单独讲解然后让朋友们自己去组合起来的,但最近时间实在是不多,所以还是直接提供源码,然后在源码上面写注释,大家自行的观看吧.源码在最下面. 首先直接把脚本拖到某物体上面,运行,就会出现了上

【Unity3D】【NGUI】Atlas的动态创建

NGUI讨论群:333417608 NGUI版本:3.6.5 1.参见SZUIAtlasMakerRuntimeTest设置相应的值以上值需要提前设置好 2.没有检查是否atlas能够正确创建,自己可以改,加入返回值 3.代码都是在NGUI里面拷贝出来的,只是进行改动,没有新代码 4.适用与那种从网上下图片,之后还不想用UITexture的人,但是还是建议用UITexture如果drawcall不是问题的话 5.自己以后更新按我的方式改改就可以 6.动态创建速度较慢,建议在游戏启动的时候运行 7

基于jquery的表格动态创建,自动绑定,自动获取值

最近刚加入GUT项目,学习了很多其他同事写的代码,感觉受益匪浅. 在GUT项目中,经常会碰到这样一个问题:动态生成表格,包括从数据库中读取数据,并绑定在表格中,以及从在页面上通过jQuery新增删除表格.如下所示: 在实现过程中,开发人员经常采用如下方式来实现: 1)          在前台,通过js生成表格行的html字符串,然后通过jquery的after方法加到表格底部. 2)          在后台,读取数据库,然后生成表格的html字符串,然后传递给前台渲染 3)         

如何在SOUI窗口中动态创建新的SWindow?

一些网友经常出现的一个问题就是我下面的代码为什么在SOUI的xxx窗口中没有动态创建了新窗口: SWindow *pWnd = new SWindow(); FindChildByName(L"xxx")->InsertChild(pWnd); 上面这样的代码有3个问题: 1.它并不会在界面中显示出来你new出来的子窗口.因为这个新插入的窗口没有指定布局属性. 2.这样做在程序退出时可能出现崩溃,因为内存分配和翻译可能不在相同的模块. 3.pWnd中的各种其它属性也没有被正常初始

获取动态创建的元素触发点击事件

获取动态创建的元素,可通过父级元素获取 $("父级元素").on("click","子元素",function(){ //此处的this指的是当前的子级元素 }) //例 $(".conListUl").on("click","#anvideovalue",function(){}); 原文地址:https://www.cnblogs.com/dxt510/p/9255049.html

JS操作select下拉框动态变动(创建/删除/获取)

1.动态创建select function createSelect(){ var mySelect = document.createElement_x("select"); mySelect.id = "mySelect"; document.body.appendChild(mySelect); } 2.添加选项option function addOption(){ //根据id查找对象, var obj=document.getElementByIdx_x

unity3d通过代码动态创建销毁游戏对象

只能动态创建内部提供的游戏对象,代码如下: //按下C后创建 if (Input.GetKeyDown (KeyCode.C)) { GameObject s1 = GameObject.CreatePrimitive (PrimitiveType.Sphere);//创建 s1.name = "qiu";//命名 s1.GetComponent<MeshRenderer> ().material.color = Color.red;//网格渲染器 s1.transform