美文网首页
Unity小知识

Unity小知识

作者: super41 | 来源:发表于2019-12-03 12:46 被阅读0次

编辑器相关

  • [ExecuteInEditMode]
    可以让组件在非运行的时候也调用Awake,Start()等生命周期方法
  • [RuntimeInitializeOnLoadMethod]
    在静态方法上加上 [RuntimeInitializeOnLoadMethod] ,可以让这个方法在游戏开始时被回调
public class GameRoot
{
    [RuntimeInitializeOnLoadMethod]
    private static void GameStar()
    {
        Debug.Log("------Game Star------");
    }
  //运行游戏后即可看到Game Star打印出来。
  //注意:方法必须为static才能被回调。类可以不继承MonoBehaviour,不影响
}
  • 遍历Enum
  public enum PanelLayer
    {
        Low,
        Mid,
        High,
        Top,
    }
for 遍历
  Array panelArray = Enum.GetValues(typeof(PanelLayer));
  for (int i = 0; i < panelArray.Length; i++)
   {
      PanelLayer item = (PanelLayer) panelArray.GetValue(i);
      Debug.Log(item.ToString() +" "+(int)item);
   }
foreach 遍历
  foreach (PanelLayer item in Enum.GetValues(typeof(PanelLayer)))
  {
    Debug.Log(item.ToString() +" "+(int)item);
  }
  • 字典根据下标获取数据
    平常list可以用 list[i]来获取元素,但字典没办法用[]来获取item。这时可以用
    var data = dict.ElementAt(i); 来获取

  • 层级检测

    • 根据层级名字获取所在层级,比如获取地板的层级:
      LayerMask.NameToLayer("Ground");
    • 然后检测主角是否在地板:从主角脚下发射一条射线,只与Ground层检测
      bool isHit = Physics2D.Raycast(transform.position, Vector2.down, 0.1f,
      LayerMask.NameToLayer(("Ground");
    • 但这样会检测不到,后来才知道得把:
      LayerMask.NameToLayer(Layer.Ground);
      改成
      1 << LayerMask.NameToLayer(Layer.Ground);
      层级是用位运算的。假设想与地板外的所有层级检测,可以这样写
      ~(1 << LayerMask.NameToLayer(Layer.Ground))
  • 图集的Generate Mip Maps选项


    image.png

    这个勾选后,会生成多份不同大小的图,然后根据相机距离决定使用那张图。
    表现出来的效果就是包体积会变大,UI图集勾选后,有时会变得模糊。
    一般说来UI图集是不要勾选这个的,一些3D模型或场景的贴图可以勾选

相关文章

网友评论

      本文标题:Unity小知识

      本文链接:https://www.haomeiwen.com/subject/jhjcgctx.html