Unity萌新日记—开发小技巧与冷知识(脚本篇)
在学习unity的过程中,总会遇到很多零碎的知识点和小技巧,在此把它们记录下来,方便日后查看。
第一篇是关于脚本的一些你可能不知道的小知识。
还是个正在学习的萌新,如果写的不好,请谅解。
Unity版本:2018.3.2f1。
1.使用RuntimeInitializeOnLoadMethod特性的静态方法会在场景加载后直接调用(这个脚本不需要挂载到物体上)
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
public static void Test()
{
Debug.Log("start game");
}
2.使用SerializeField将私有变量暴露在检视面板中,使用HideInInspector特性在检视面板中隐藏公有变量

3.用以下代码获得一个随机的布尔值
bool x= (Random.value > 0.5f);
4.以下代码可以在第一个协程结束时启动第二个协程
IEnumerator First()
{
yield return StartCoroutine(Second());
}
IEnumerator Second()
{
yield return 0;
}
5.以下代码可以让编辑器暂停,方便调试
EditorApplication.isPaused = true;
6.使用CompareTag来比较标签而不是obj.Tag==“player”,效率更高
GameObject obj;
if (obj.CompareTag("player"))
{
Debug.Log("Is Player");
}
7.Debug支持一些简单样式
Debug.Log("<color=red>Oh!!!</color>");

8.怎么忽略控制台警告

先查看警告中的代号,就是CS之后的数字,这里是0414,再到脚本中最上方加上以下代码
#pragma warning disable 0414
回到Unity编译,就不会再弹出警告了
9.不要频繁使用Camera.main,它其实就是…
Camera.main = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();
10.比较距离时不要用Vector3.distance
Vector3.sqrMagnitude用于得到向量长度未开方的值,使用(a - b).sqrMagnitude和距离平方作比较,这样不用做开方运算,效率更高
Vector3 a;
Vector3 b;
float distance = 1f;
void Update()
{
if ((a - b).sqrMagnitude < distance * distance)
{
//todo
}
}
11.给检视面板添加一些效果
[Header("等级")] //给变量加上标题文字
public int level;
[Space] //空行
[TextArea] //多行输入框
public string Des;
[Range(0,10)] //滑动条
public float Speed=1;
[Tooltip("生命值")] //鼠标移到变量上出现的提示
public int Hp = 100;

12.如果只是存储几个数据,建议使用结构体而不是类,以减少垃圾回收
struct Data
{
int level;
int hp;
int gold;
}
13.字符串拼接会造成大量垃圾回收,建议使用StringBuilder
int i = 1;
//字符串拼接,不建议
string s = "aaa" + i + "bbb" + "ccc";
//StringBuilder
StringBuilder sb = new StringBuilder();
sb.Append("aaa");
sb.Append(i);
sb.Append("bbb");
sb.Append("ccc");
14.让游戏物体延迟一段时间后销毁
只需给Destroy函数多传入一个参数即可
Destroy(gameObject, 2f); //延迟2秒后销毁
15.想要平滑地移动刚体应当使用MovePosition方法,想要传送刚体应设置Rigidbody.Position
官方文档原话,总之有刚体就不要用Transform去移动

16.得到一定范围内所有物体(需要有碰撞体)
Vector3 A = Vector3.zero;
Collider[] colliders=Physics.OverlapSphere(Vector3.zero, 5f);
//得到以A点为中心半径为5的圆内所有带碰撞体的物体
17.使用LookRotation朝向目标点
public Transform target;
void Start()
{
transform.rotation = Quaternion.LookRotation(target.position - transform.position);
}
18.自动添加依赖组件
[RequireComponent(typeof(Rigidbody))]
在类前面添加RequireComponent特性,当你将这个脚本挂载到游戏物体上时,如果游戏物体没有所需的依赖组件(此处是刚体组件),会自动添加一个(注意已经挂载该脚本的游戏物体不受影响)
19.通过代码设置Hierarchy层级
使用SetSiblingIndex设置物体在Hierarchy面板的位置
void Start()
{
transform.SetSiblingIndex(0);
}
运行前
运行后
20.遍历所有子物体(只能获取到下一级)
foreach(Transform t in transform)
{
print(t.name);
}
第一篇暂时先写这么多,写博客还是挺累的啊…越发佩服大佬们,以后再更新其他小技巧。
Unity萌新日记—开发小技巧与冷知识(脚本篇)的更多相关文章
- BizTalk开发小技巧
BizTalk开发小技巧 随笔分类 - Biztalk Biztalk 使用BizTalk实现RosettaNet B2B So Easy 摘要: 使用BizTalk实现RosettaNet B2B ...
- Windows统一平台: 开发小技巧
Windows统一平台: 开发小技巧 技巧一: 在手机端拓展你应用的显示区域.(WP8.1中也适用) 对于Windows Phone系统的手机, 手机屏幕最上方为系统状态栏(System Tray), ...
- flex开发小技巧集锦
关于flex开发网上有非常多的相关信息介绍,因此我们要想学习关于flex开发的知识信息技能是一件非常简单和方便的事情.而针对于flex开发小编要告诉大家的是一些flex开发小技巧.利用这些小技巧能够有 ...
- 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/ ...
- 移动Web开发小技巧
移动Web开发小技巧 添加到主屏后的标题(IOS) name="apple-mobile-web-app-title" content="标题"> 启用 ...
- Java开发小技巧(三):Maven多工程依赖项目
前言 本篇文章基于Java开发小技巧(二):自定义Maven依赖中创建的父工程project-monitor实现,运用我们自定义的依赖包进行多工程依赖项目的开发. 下面以多可执行Jar包项目的开发为例 ...
- iOS开发小技巧 - UILabel添加中划线
iOS开发小技巧 遇到的问题: 给Label添加中划线,然后并没有效果 NSString *str = [NSString stringWithFormat:@"合计金额 ¥%.2f&quo ...
- PHP开发小技巧②—实现二维数组根据key进行排序
在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...
- PHP开发小技巧③—实现多维数组转化为一维数组
在平常的项目开发中我们多会用到让多维数组转化为一维数组的情况,但是很多Programmer不会将其进行转化,也有些没有想到很好的算法然后经过乱起八糟的运算方式将其勉强转化好,但是所写的程序代码冗余非常 ...
随机推荐
- 多线程操作C++ STL vector出现概率coredump问题及尽量避免锁的双缓冲队列
多线程操作全局变量,必须考虑同步问题,否则可能出现数据不一致, 甚至触发coredump. 前段时间, 遇到一个多线程操作了全局的vector的问题, 程序崩了.场景是这样的:某全局配置参数保存在一 ...
- CSS控制列表与导航的制作
<style type="text/css"> /*body默认是有边距的*/ body{ margin:0;} /*ul默认是有边距的所以先将边距去掉IE78只要加上 ...
- 1798. [AHOI2009]维护序列【线段树】
Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...
- 4521: [Cqoi2016]手机号码
4521: [Cqoi2016]手机号码 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1030 Solved: 609 [Submit][Statu ...
- ethers.js-6-Low-Level API
Low-Level API These are advanced, low-level API features that should, for most people not be necessa ...
- JDBC数据对象存储
一:将查询的结果生成对象,储存在数组中. package day31; import java.sql.Connection; import java.sql.PreparedStatement; i ...
- ucos串口通讯模块设计
在嵌入式应用中,使用RTOS的主要原因是为了提高系统的可靠性,其次是提高开发效率.缩短开发周期.uCOS-II是一个占先式实时多任务内核,使用对象是嵌入式系统,对源代码适当裁减,很容易移植到8~32位 ...
- 【LeetCode2】Add Two Numbers★★
题目描述: 解题思路: 给定两个链表(代表两个非负数),数字的各位以倒序存储,将两个代表数字的链表想加获得一个新的链表(代表两数之和). 如(2->4->3)(342) + (5-> ...
- linux文件属性介绍
Linux系统有如表所示的几种文件类型. 使用ls -lih 命令就可以看到各个文件的具体信息,下面选取以上所提到的这几种文件,列出他们的信息. 除了设备文件(包括字符设备文件和块设备文件二种)外,每 ...
- 关于在MySql的decimal中犯的一个错-此篇文章目的在于警醒自己
今天在运行一段程序的时候报了Out of range value错误,网上的解释是说这个值与数据库字段类型不匹配,然而程序里面设置的是BigDecimal,数据库设置的是decimal,没有多想就把s ...