Unity笔记

时间:2023-03-09 00:15:44
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, ), this._shake_time);
}

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

TweenPosition[] tween = null;
TweenPosition tw = null; // 获取对象下全部TweenPosition组件
tween = this._show_panel.GetComponents<TweenPosition>();
for (int i = ; i < tween.Length; i++)
{
tw = tween[i]; // 选择要播放的Tween动画组
if (tw.tweenGroup == )
{
// 重置函数,不重置有可能出现第二次播放错误的情况
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面板上的值。