• Unity笔记


     1、使某个对象上的脚本失效和生效:

    GameObject.Find("xxx").transform.GetComponent<xxx>().enabled = false; //失效
    GameObject.Find("xxx").transform.GetComponent<xxx>().enabled = true;  //失效

     2、NGUI相机震动效果:

    public float _shake_time = 0.5f;
    public void CameraShake()
    {
      iTween.ShakePosition(GameObject.Find("UI Root/Camera").camera.gameObject, new Vector3(0.05f, 0.05f, 0), this._shake_time);
    }

     3、NGUI中播放某个对象下的Tween动画:

    TweenPosition[] tween = null;
    TweenPosition tw = null;
    
    // 获取对象下全部TweenPosition组件
    tween = this._show_panel.GetComponents<TweenPosition>();
    for (int i = 0; i < tween.Length; i++)
    {
        tw = tween[i];
        
        // 选择要播放的Tween动画组
        if (tw.tweenGroup == 1)
        {
            // 重置函数,不重置有可能出现第二次播放错误的情况
            tw.ResetToBeginning();
            tw.Play();
        }
    }            

     4、获取某个父对象中的组件:

    gameObject.transform.GetComponentInParent<InfoPanelManager>()

    5、获取某个子对象组件:

    gameObject.transform.GetComponentInChildren<PanelFade>()

     6、Scroll View中按钮中的按钮点击失效:

    问题描述:  

      用NGUI制作Scroll View时,Scroll View中的每一项为一个按钮,每一项还有多个按钮用于弹出不同的界面,初始时子按钮的Depth比父按钮的Depth高。这是把该界面作为预设用于在场景中点击某个对象时动态添加,会出现只能响应父按钮的点击事件,而子按钮的点击事件全部被屏蔽掉了。

    解决方案:

      将子按钮的Box Collider组件的size项的Z值设为比父按钮的大,NGUI按钮默认Z为0,即调为0.1即可。

    注:

      修改Box Collider组件的size项的Z值时,应该不勾选UISprite组件的Collider auto-adjust to match才能使修改生效

    7、延迟等待执行代码方法:

      这里用StartCoroutine开启协同程序的方法来实现。

    StartCoroutine(WaitForShow(time));
    IEnumerator WaitForShow(float time)
    {
        yield return new WaitForSeconds(time);
    }

      值得注意的是如果这段程序需要运行一段较长时间,在运行期间,如果开启这段协同程序的组件被删除了,则这段程序就不在执行了,因此使用StartCoroutine要注意源组件的生命周期和协同程序的生命周期。

    8、NGUI中所有panel都有一个Depth值,会影响所有它包含的widget。如果你的UI有很多窗口,那么最好每个窗口有一个panel。Panel上的depth权重会远远高于每一个widget的depth权重,所以保证panel不要使用同样的depth。如果使用同样的depth在panel上,那么draw call会被自动拆分来保证渲染顺序,所以会增加更多的draw call。

    9、代码添加Tween组件动画播放完后执行某个函数:

    参考链接http://unity3d.9tech.cn/news/2013/1114/38624.html

    EventDelegate.Add(this._fade_in_tween.onFinished, DestoryFadeInTween);
    
    void DestoryFadeInTween()
    {
    }

    10、NGUI制作一个Panel时,每在Panel下添加一个子对象,如Label或者Sprite,后加的子对象Depth默认会加1,这样的话会导致当前Panel的Draw Call增加,应该是只要不互相重叠的子对象尽量用同一个Depth值。

    11、Physics.RaycastAll 和Physics.Raycast 中的只选定Layermask参数,该参数表示值响应该层内的碰撞器,其它层内碰撞器忽略。Layermask的值应该等于2的n次方,这个n是layer面板上的值。

  • 相关阅读:
    C# 反射
    WPF之布局
    java网络编程中的BIO,NIO,AIO
    BIO的阻塞
    AttributeView的用法
    将linux文件中的tab更换为空格的三种方法
    安装nginx-ingress控制器,使用
    docker 搭建jenkins
    Manjaro 18.0.1 系统安装后值得看的两篇博客
    github创建自己的项目并进行推送
  • 原文地址:https://www.cnblogs.com/vitah/p/4030087.html
Copyright © 2020-2023  润新知