在学习unity的过程中,总会遇到很多零碎的知识点和小技巧,在此把它们记录下来,方便日后查看。
第一篇是关于脚本的一些你可能不知道的小知识。
还是个正在学习的萌新,如果写的不好,请谅解。
Unity版本:2018.3.2f1。

1.使用RuntimeInitializeOnLoadMethod特性的静态方法会在场景加载后直接调用(这个脚本不需要挂载到物体上)

  1. [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
  2. public static void Test()
  3. {
  4. Debug.Log("start game");
  5. }

2.使用SerializeField将私有变量暴露在检视面板中,使用HideInInspector特性在检视面板中隐藏公有变量

3.用以下代码获得一个随机的布尔值

  1. bool x= (Random.value > 0.5f);

4.以下代码可以在第一个协程结束时启动第二个协程

  1. IEnumerator First()
  2. {
  3. yield return StartCoroutine(Second());
  4. }
  5. IEnumerator Second()
  6. {
  7. yield return 0;
  8. }

5.以下代码可以让编辑器暂停,方便调试

  1. EditorApplication.isPaused = true;

6.使用CompareTag来比较标签而不是obj.Tag==“player”,效率更高

  1. GameObject obj;
  2. if (obj.CompareTag("player"))
  3. {
  4. Debug.Log("Is Player");
  5. }

7.Debug支持一些简单样式

  1. Debug.Log("<color=red>Oh!!!</color>");

8.怎么忽略控制台警告


先查看警告中的代号,就是CS之后的数字,这里是0414,再到脚本中最上方加上以下代码

  1. #pragma warning disable 0414

回到Unity编译,就不会再弹出警告了

9.不要频繁使用Camera.main,它其实就是…

  1. Camera.main = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();

10.比较距离时不要用Vector3.distance

Vector3.sqrMagnitude用于得到向量长度未开方的值,使用(a - b).sqrMagnitude和距离平方作比较,这样不用做开方运算,效率更高

  1. Vector3 a;
  2. Vector3 b;
  3. float distance = 1f;
  4. void Update()
  5. {
  6. if ((a - b).sqrMagnitude < distance * distance)
  7. {
  8. //todo
  9. }
  10. }

11.给检视面板添加一些效果

  1. [Header("等级")] //给变量加上标题文字
  2. public int level;
  3. [Space] //空行
  4. [TextArea] //多行输入框
  5. public string Des;
  6. [Range(0,10)] //滑动条
  7. public float Speed=1;
  8. [Tooltip("生命值")] //鼠标移到变量上出现的提示
  9. public int Hp = 100;

12.如果只是存储几个数据,建议使用结构体而不是类,以减少垃圾回收

  1. struct Data
  2. {
  3. int level;
  4. int hp;
  5. int gold;
  6. }

13.字符串拼接会造成大量垃圾回收,建议使用StringBuilder

  1. int i = 1;
  2. //字符串拼接,不建议
  3. string s = "aaa" + i + "bbb" + "ccc";
  4. //StringBuilder
  5. StringBuilder sb = new StringBuilder();
  6. sb.Append("aaa");
  7. sb.Append(i);
  8. sb.Append("bbb");
  9. sb.Append("ccc");

14.让游戏物体延迟一段时间后销毁

只需给Destroy函数多传入一个参数即可

  1. Destroy(gameObject, 2f); //延迟2秒后销毁

15.想要平滑地移动刚体应当使用MovePosition方法,想要传送刚体应设置Rigidbody.Position

官方文档原话,总之有刚体就不要用Transform去移动

16.得到一定范围内所有物体(需要有碰撞体)

  1. Vector3 A = Vector3.zero;
  2. Collider[] colliders=Physics.OverlapSphere(Vector3.zero, 5f);
  3. //得到以A点为中心半径为5的圆内所有带碰撞体的物体

17.使用LookRotation朝向目标点

  1. public Transform target;
  2. void Start()
  3. {
  4. transform.rotation = Quaternion.LookRotation(target.position - transform.position);
  5. }

18.自动添加依赖组件

  1. [RequireComponent(typeof(Rigidbody))]

在类前面添加RequireComponent特性,当你将这个脚本挂载到游戏物体上时,如果游戏物体没有所需的依赖组件(此处是刚体组件),会自动添加一个(注意已经挂载该脚本的游戏物体不受影响)

19.通过代码设置Hierarchy层级

使用SetSiblingIndex设置物体在Hierarchy面板的位置

  1. void Start()
  2. {
  3. transform.SetSiblingIndex(0);
  4. }

运行前
运行后

20.遍历所有子物体(只能获取到下一级)

  1. foreach(Transform t in transform)
  2. {
  3. print(t.name);
  4. }

第一篇暂时先写这么多,写博客还是挺累的啊…越发佩服大佬们,以后再更新其他小技巧。

Unity萌新日记—开发小技巧与冷知识(脚本篇)的更多相关文章

  1. BizTalk开发小技巧

    BizTalk开发小技巧 随笔分类 - Biztalk Biztalk 使用BizTalk实现RosettaNet B2B So Easy 摘要: 使用BizTalk实现RosettaNet B2B ...

  2. Windows统一平台: 开发小技巧

    Windows统一平台: 开发小技巧 技巧一: 在手机端拓展你应用的显示区域.(WP8.1中也适用) 对于Windows Phone系统的手机, 手机屏幕最上方为系统状态栏(System Tray), ...

  3. flex开发小技巧集锦

    关于flex开发网上有非常多的相关信息介绍,因此我们要想学习关于flex开发的知识信息技能是一件非常简单和方便的事情.而针对于flex开发小编要告诉大家的是一些flex开发小技巧.利用这些小技巧能够有 ...

  4. TP开发小技巧

    TP开发小技巧原文地址http://wp.chenyuanzhao.com/wp/2016/07/23/tp%E5%BC%80%E5%8F%91%E5%B0%8F%E6%8A%80%E5%B7%A7/ ...

  5. 移动Web开发小技巧

    移动Web开发小技巧 添加到主屏后的标题(IOS) name="apple-mobile-web-app-title" content="标题"> 启用  ...

  6. Java开发小技巧(三):Maven多工程依赖项目

    前言 本篇文章基于Java开发小技巧(二):自定义Maven依赖中创建的父工程project-monitor实现,运用我们自定义的依赖包进行多工程依赖项目的开发. 下面以多可执行Jar包项目的开发为例 ...

  7. iOS开发小技巧 - UILabel添加中划线

    iOS开发小技巧 遇到的问题: 给Label添加中划线,然后并没有效果 NSString *str = [NSString stringWithFormat:@"合计金额 ¥%.2f&quo ...

  8. PHP开发小技巧②—实现二维数组根据key进行排序

    在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...

  9. PHP开发小技巧③—实现多维数组转化为一维数组

    在平常的项目开发中我们多会用到让多维数组转化为一维数组的情况,但是很多Programmer不会将其进行转化,也有些没有想到很好的算法然后经过乱起八糟的运算方式将其勉强转化好,但是所写的程序代码冗余非常 ...

随机推荐

  1. rz -be 上传文件解压失败

    在把Windows上的文件传至Linux端时用到SecureCRT,一般小文件都没有问题,文件太大时则出现了上传后的文件只有几K大小,当然大于2个G的是不可能传的上去的了.对于几百M到1G多的大文件要 ...

  2. 纯css3云彩动画效果

      效果描述: 纯CSS3实现的云彩动画飘动效果 非常逼真实用 使用方法: 1.将body中的代码部分拷贝到你的页面中 2.引入对应的CSS文件即可

  3. KVOController原理解析

    1.使用类似动态代理的模式和消息派发中枢模式实现整个架构: 2.使用NSMapTable和NSHashTable进行切面信息的增删查维护:主要用于去重和查看是否存在. 实现方式 消息流 KVOCont ...

  4. BZOJ4802:欧拉函数(Pollard-Rho,欧拉函数)

    Description 已知N,求phi(N) Input 正整数N.N<=10^18 Output 输出phi(N) Sample Input 8 Sample Output 4 Soluti ...

  5. 1834. [ZJOI2010]网络扩容【费用流】

    Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求:  1.在不扩容的情况下,1到N的最大流:  2.将1到N的最大流增加K所需 ...

  6. 1925: [Sdoi2010]地精部落

    1925: [Sdoi2010]地精部落 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1929 Solved: 1227 [Submit][Statu ...

  7. Sublime Text 自动生成文件头部注释(版权信息):FileHeader 插件的使用

    (一)安装步骤 1.先安装一个 Package Control 插件.相信大家使用 Sublime 的话都有安装这个了2.Preference -> Package Control -> ...

  8. 优化方法:SGD,Momentum,AdaGrad,RMSProp,Adam

    参考: https://blog.csdn.net/u010089444/article/details/76725843 1. SGD Batch Gradient Descent 在每一轮的训练过 ...

  9. JDBC连接池使用

    一:一个服务在操作数据库的操作的时候,连接和关闭资源是很消耗系统的资源,不能再每次用户操作数据库的时候,都需要重新建立连接和 关闭连接. 如果这样操作的话,对系统和用户来说,都会消耗大量的资源.所以操 ...

  10. PHP通过_call实现多继承

    原文地址:http://small.aiweimeng.top/index.php/archives/53.html 上一篇讲到php可以通过接口是实现代码的复用. 那么这篇文章简单介绍下使用_cal ...