[Unity3D]引擎学习之注意事项(持续更新中)

原理相关
  • 在3D世界中,通过triangles来呈现shape的原因:We use triangles because they provide a fast way for a computer to represent surfaces, they’re pretty simple structures, and we’ve been using them for quite a while, so computer hardware is optimized for them. Now let’s take a look at the simplest kind of meshes...
调试相关
  • 如果是想在触发粒子系统效果的时候播放声音(比如爆炸的特殊发生时也播放声音),则需要将爆炸效果的粒子系统保持为Prefab后,添加Audio Source组件,在组件中添加声音文件并且确保play on awake是开启的:
    194303-20160927210303516-612636117.png
  • LoadScene之后GI光影发生变化,并且没有重新烘焙。方法为在Lighting面板将最下方的Auto选项取消勾选,并且点一下旁边的build。该错误只在编辑器发生,发布后的产品不会有该问题
    194303-20160927210631672-481733742.png
  • GameObject对象基本不会通过FindGameObjectWithTag来获取,还可以通过静态变量或者建立一个静态的单例资源管理器来声明Transform变量。其他脚本可以无需搜索直接获取主角Transform
  • 获取子弹对象,在速度不快的时候可以通过比较Tag获取:
    ```
    void OnTriggerEnter(Collider other)
    {

      if (other.tag.CompareTo("EnemyRocket") == 0) {

    ```
    如果速度快,就通过射线获取

  • SmoothDamp
    194303-20160928192207547-452136815.png

Unity协程处理
GameObject和Component的区别: 参考链接
  • GameObject可以理解为一个容器,里面可以包括一个或者多个的component,比如transform就是用来标识3D位置的component。好比GameObject就是一辆车的基本底盘或者框架,轮胎 车门等等就是它的component,这些component都是属于这个GameObject的,component不可能脱离GameObject而独立存在。
  • 所以说transform.gameObject是获取transform这个组件所在的容器对象,而gameObject.transform是获取容量里面的transform组件。
  • GameObject只有非常少的属性和方法,具体的效果还是需要操作容量里面的各个component。若添加了一些自定义的component,我们可以通过GetComponent()获取。
  • 注意,若一个GameObject中多个同类型的的组件(比如一辆车有多个车轮),则GetComponent()会返回第一个组件,GetComponents()会返回组件队列。
  • SetActive是GameObject的启用禁用,enable是GameObject下组件的启用禁用
  • 获取对象的方法解析, 不过这个文档里面说Transform和GameObject有点问题,GameObject应该是Transform组件的容器

  • 获取隐藏的GameObject对象方法
    ```
    GameObject[] pAllObjects = (GameObject[])Resources.FindObjectsOfTypeAll(typeof(GameObject));
    foreach (GameObject pObject in pAllObjects)
    {
    if (pObject.transform.parent != null)
    {
    continue;
    }

          if (pObject.hideFlags == HideFlags.NotEditable || pObject.hideFlags == HideFlags.HideAndDontSave)
           {
               continue;
           }
    
          if (Application.isEditor)
           {
               string sAssetPath = AssetDatabase.GetAssetPath(pObject.transform.root.gameObject);
               if (!string.IsNullOrEmpty(sAssetPath))
               {
                   continue;
               }
           }
    
          Debug.Log(pObject.name);
       }

    ```

    推荐关注的技术
  • Unity的UI系统,UGUI和NGUI
  • 更多C#知识:数组(List),委托,代理。
  • Vector3下的相关函数,Mathf下的相关函数。
  • 各类Unity范例教程

转载于:https://www.cnblogs.com/xiuj/p/5914280.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值