Unity API记录
Unity脚本生命周期 运行顺序
Awake > OnEnable > Start > FixedUpdate > Update > LateUpdate > OnGUI > OnDisable > OnDestroy
1.Vector3.MoveTowards (匀速运动到目标点)
2.Vector3.Lerp (线性插值,不是匀速的,是距离目标点越近越慢,越远越快)
3.Mathf.Lerp (通过t在A和B之间进行线性插值)(两个浮点值之间插值的浮点数结果)
4.Mathf.Abs (返回绝对值 性质 :正数、零的绝对值是它的本身,负数的绝对值是它的相反的数)
5.Mathf.Max (返回最大值)
6.Mathf.Min (返回最小值)
7.Vector3.Normalize (ve3) (变成标准化向量为1)
8.Vector3.Angle (计算角度)
向量的各个api
旋转物体到固定角度
cameraMain.rotation = Quaternion.Slerp(cameraMain.rotation, Quaternion.Euler(10, 0, 0), 10 * Time.deltaTime);
7.SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); (重新载入本场景,不会闪屏)
8.[Serializable] 对类 结构体 委托 枚举 进行序列化,要不然会空
9. [SerializeField] 强制unity去序列化一个私有域。这是一个内部的unity序列化功能 如私有的private 可以在面板上显示
10. C#中有一个三元运算符“?”,语法为:条件表达式?表达式1:表达式2;
该操作首先求出条件表达式的值(bool类型),为true时调用表达式1,为flase时调用表达式2。其逻辑为:“如果为真执行第一个,否则执行第二个。”
例如:
int b = 0; int a = 3 > 4 ? b = 3 : b = 4;//如果为真 b=3 如果为假 b=4 Debug.Log(b);
11.字符串转int float
Convert.ToInt32(string); int.parse(string); float.parse(string);
12.读取寄存器的值
十进制转二进制
ushort[] msg = modbusIpMaster.ReadInputRegisters(0x01, 0x01, 0x01); Debug.Log("补 等于了?"); foreach (var item in msg) { //转换二进制 item是十进制的 string ooo = Convert.ToString(item, 2); string s= ooo; //因为数据采集模块是16位的 所以得往前面补0 变成一个16位数 for (int i = 0; i < 16 - ooo.Length; i++) s = s.Insert(0, "0");
13.//冒泡排序
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 冒泡排序 /// </summary> public class MaoPao : MonoBehaviour { public int[] arr = {5,90,78,98,60,55,20,40,92,54}; // Start is called before the first frame update void Start() { for (int i = 0; i < arr.Length-1; i++) //arr.Length-1 减一里面会少执行一次 不减也不会影响结果 { for (int k = i+1; k < arr.Length; k++) { //从大到小排序 < 从小到大排序 > if (arr[i]<arr [k]) { int temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } } } }
13.1添加一个插入排序
从小到大排序时,判断条件为arr[j] > key,从大到小排序时,判断条件为arr[j] < key。其他部分代码相同。
public static void InsertionSort(int[] arr) { for (int i = 1; i < arr.Length; i++) { int key = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; } }
14.unity Editor 刷新
# if UNITY_EDITOR AssetDatabase.Refresh(); //刷新Editor #endif
15. unity 纹理动画 (修改材质球的属性)
material.SetTextureOffset("_Normal",new Vector2 (0,-offset_float));
修改材质球的自发光属性
启用自发光效果的代码是 material.EnableKeyword("_EMISSION")
关闭自发光效果的代码是 material.DisableKeyword("_EMISSION")
16.自动寻路设置属性介绍
17.unity判断平台
webgl 平台
UNITY_WEBGL
#if UNITY_EDITOR Debug.Log("Unity Editor"); #endif #if UNITY_IOS Debug.Log("Iphone"); #endif #if UNITY_STANDALONE_OSX Debug.Log("Stand Alone OSX"); #endif #if UNITY_STANDALONE_WIN Debug.Log("Stand Alone Windows"); #endif #if UNITY_ANDROID Debug.Log("Android"); #endif
18. 不让公共变量显示在Inspector面板上面 让公共变量显示在Inspector面板上面
[HideInInspector] [SerializeField]
[
18.1 unity UGUI Image API解析
Preserve Aspect(锁定比例):针对Simple模式,勾选之后,无论图片的外形放大还是缩小,都会一直保持初始的长宽比例。
19. 指示游戏尝试指定帧率渲染
using UnityEngine; using System.Collections; /// <summary> /// 开启垂直同步 帧率固定60FPS 指示游戏尝试指定帧率渲染 /// </summary> public class Set60Fps : MonoBehaviour { // Use this for initialization void Start () { Application.targetFrameRate = 60; } private void Update() { Debug.Log(Application.targetFrameRate); } }
20.unity 返回颜色API
ColorUtility.TryParseHtmlString("#00FF00", out newcolor);
21.文字字符串里面不同的颜色拼接使用
text.text="(<color="red">错误</color>)"+" (<color="green">正确</color>)";
22.unity 代码修改button点击后的颜色
ColorBlock cb = new ColorBlock(); cb.normalColor = Color.white; cb.highlightedColor = Color.white; cb.pressedColor = Color.white; cb.disabledColor = new Color(1, 134 / 255f, 0, 1); cb.colorMultiplier = 1; obj.transform.Find("Button").GetComponent<Button>().colors = cb;
23. unity 组件 VerticalLayoutGroup
自动展开收起组件
24.Unity资源打包 (打AB包) 脚本必须放在Assets\ Editor里面
脚本
using UnityEngine; using UnityEditor; public class BuildAssetBundle : MonoBehaviour { [MenuItem("Tools/打AB包")] public static void BuildAB() { BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath, BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.StandaloneWindows64); AssetDatabase.Refresh(); Debug.LogError("打包完成"); } }
25. unity调用本地打包文件路径,exe路径(pc端播放本地视频)
编辑器路径和PC路径
#if UNITY_EDITOR configPath = System.Environment.CurrentDirectory + @"/Assets/党建视频"; #elif UNITY_STANDALONE_WIN configPath = System.Environment.CurrentDirectory + @"\\党建视频"; #endif
public void Button_2() { //本地视频的路径 视频在exe打包文件夹下 跟exe是同目录下 string shipin1 = @"\UNITYVIDEO\1.mp4"; //exe打包文件的路径 string configPath = System.Environment.CurrentDirectory; }
俩个路径加一起就可以了configPath +shipin1
26.Unity字符串插入

public void Button_1() { string klp = "1"; string lok = klp; int aa = 0; for (int i = 0; i < 16 - klp.Length; i++) { //Insert 插入 0位置是在1的左边 1位置是在右边 以此类推 lok = lok.Insert(0, "0"); aa++; } Debug.Log(lok + "长度:" + lok.Length + "次数:" + aa); string s = "20210101"; s = s.Insert(4, "-"); s = s.Insert(7, "-"); //先插入的点已经算位置了,本来202101是第六的位置,但是第一个"-"已经先插入了4的位置,所以第二个 "-" 加1是7的位置 Debug.Log(s); }
27.unity 打开网页API
其实unity官方有提供访问打开网页的api: 输入网址即可
Application.OpenURL("https://www.cnblogs.com/qq2351194611/");
OnBecameVisible() : 这个的意思是当物体在/进入摄像机会调用一次,类似触发器OnTriggerEnter();
OnBecameInvisible() : 这个的意思是当物体离开摄像机会调用一次,类似触发器OnTriggerExit();
28.unity遮挡剔除设置
静态遮挡物 Occluder Static
静态被遮挡物 Occludee Static
29.unity判断自身有没有脚本
if (transform.TryGetComponent(out MonoBehaviour MonoBeha )) { Debug.Log("有脚本"+ MonoBeha); } else { Debug.Log("没有脚本"); }
30.模型双面shader调节
LegacyShaders/Transparent/Cutout/Soft Edge Unlit
31.StartsWith 用法
a.startsWith(b) --判断字符串a,是不是以字符串b开头
a.endsWith(b) --判断字符串a,是不是以字符串b结尾
32.float保留两位小数
float i=0.2584f;
float k=float.Parse ( Math.Round(i,2).ToString ());
33.围绕一个点生成圆,产生跑马灯效果脚本如下

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Yuan : MonoBehaviour { public GameObject obj; /// <summary> 设置中心点,同样也是父物体 </summary> public Transform tra; /// <summary> 生成数量 </summary> int iconCount = 24; /// <summary> 圆半径 </summary> float fRadius = 20; public Material material; public Material whiteMaterial; private bool jie = false; private void Start() { CreatCircle(); jie = true; StartCoroutine(Jieased()); } IEnumerator Jieased() { while (jie) { var trans = transform.GetComponentsInChildren<Renderer>(); Debug.Log(trans.Length); for (int i = 0; i < trans.Length-4; i++) { trans[i].material = material; trans[i+1].material = material; trans[i+2].material = material; trans[i + 3].material = material; trans[i + 4].material = material; yield return new WaitForSeconds(0.02f); trans[i].material = whiteMaterial; trans[i + 1].material = whiteMaterial; trans[i + 2].material = whiteMaterial; trans[i + 3].material = whiteMaterial; trans[i + 4].material = whiteMaterial; } yield return null; } } /// <summary> /// 围绕一个点生成圆 /// </summary> public void CreatCircle() { float angle = 360f / iconCount; for (int i = 0; i < iconCount; i++) { GameObject go = GameObject.CreatePrimitive(PrimitiveType.Sphere ); go.transform.SetParent(tra, false); float x = fRadius * Mathf.Sin((angle * i) * (Mathf.PI / 180f)); float y = fRadius * Mathf.Cos((angle * i) * (Mathf.PI / 180f)); go.transform.localPosition = new Vector3(x, 0, y); go.transform.localEulerAngles = new Vector3( 0, Mathf.Abs(angle * i - 360), 0 ); go.name = i.ToString(); } } }
34.列表和数组的互相转换
数组转列表
GameObject[] G ; List<GameObject> gl = new List<GameObject>(G);
列表转数组
List<GameObject> GL = new List<GameObject>(); GameObject[] g = GL.ToArray();
34.1 Particle System特效参数详解
35.ScrollRect滚动条实时显示最下面的消息API
public ScrollRect scrollRect; scrollRect.verticalNormalizedPosition = 0;
36.给脚本添加中文名字
Camera-Control 路径
在类上面添加 [AddComponentMenu("Camera-Control/中文名字或者英文名字")]
37.给物体添加tag或者层级 (前提是已经手动在编辑器已添加此tag或此层级)
GameObject obj; obj.tag = "tagg"; obj.layer= LayerMask.NameToLayer("equipmentTag");
38.给模型换材质球,还能返回回来材质 (功能代码复用性极强)
public class TMObj { public Transform obj;//模型 public Material[] objMatArray;//模型原材质(用于还原透明) public TMObj(Transform _obj) { obj = _obj; objMatArray = new Material[obj.GetComponent<MeshRenderer>().materials.Length]; for (int i = 0; i < obj.GetComponent<MeshRenderer>().materials.Length; i++) { objMatArray[i] = obj.GetComponent<MeshRenderer>().materials[i]; } } }
39.递归物体
代码如下:
public void Add_Collider(Transform obj) { if (obj.transform.childCount > 0) { for (int i = 0; i < obj.transform.childCount; i++) { Transform child = obj.transform.GetChild(i); if (child.GetComponent<MeshRenderer>()) { Debug.Log("lpl"); } Add_Collider(child); } } }
40.unity 打开电脑文件选择电脑文件
public void SCPShowDialog() { string filter = "配置文件(xml)\0*.xml;"; var file = OpenFileByWin32.OpenFile("选择配置文件", filter); SCPField.text = file; } public void VideoShowDialog() { string filter = "视频文件(avi,mp4,wmv,mov,webm,mpg,mpeg,m4v,ogv,vp8,asf,dv)\0"; filter += "*.avi;*.mp4;*.wmv;*.mov;*.webm;*.mpg;*.mpeg;*.m4v;*.ogv;*.vp8;*.asf;*.dv"; var file = OpenFileByWin32.OpenFile("选择视频文件", filter); VideoField.text = file; }
41.GC垃圾回收代码(不用频繁调用否则影响性能)在GC操作并不影响游戏体验的时候(例如场景切换的时候),我们可以主动的调用GC操作:
System.GC.Collect();
42.unity 实现双击操作的代码
private float tapThreshold = 0.20f; private float tapTimer = 0.0f; private bool tap = false; private void Update() { if (Input.GetMouseButtonDown(0)) { if (Time.time < this.tapTimer + this.tapThreshold) { Debug.Log("双击"); this.tap = false; return; } this.tap = true; this.tapTimer = Time.time; } if (this.tap == true && Time.time > this.tapTimer + this.tapThreshold) { this.tap = false; Debug.Log("单击"); } }
43.unity 透明材质调试选择
44.unity动态修改天空盒(系统api RenderSettings)
RenderSettings.skybox = newskybox;
45.代码动态把枚举放到数组里面 枚举是TagObj
public string[] doorType;
doorType = System.Enum.GetNames(typeof(TagObj));
46.return break continue的区别
break 跳出当前循环体,
continue 跳出循环体中的当次循环,进入下一次循环
return终止程序向前,并可返回一个值
47.计算一条线段的旋转角度

/// <summary> /// 计算线段的旋转角度 /// </summary> /// <param name="lrr">线</param> /// <returns></returns> public float CalculatingAngle(LineRenderer lrr) { Vector3 v1 = lrr.GetPosition(1) - lrr.GetPosition(0); float aa=0; if (v1 .x <0&&v1.z >0||v1.x >0&&v1.z >0) { aa = Vector3.Angle(v1, new Vector3(1, 0, 0)); } else { aa = Vector3.Angle(v1, new Vector3(-1, 0, 0)); } return aa; }
48.List API详解
49.堆栈队列的区别:
堆、栈、队列之间的区别是?
①堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。
②栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来。(后进先出)
③队列只能在队头做删除操作,在队尾做插入操作.而栈只能在栈顶做插入和删除操作。(先进先出)
50.材质球渲染模式简介
51. Unity常用事件接口
(需要引用 using UnityEngine.EventSystems;)
52.unity克隆物体API
GameObject.CreatePrimitive(PrimitiveType.Cube);
53.DoTween代码设置方法如下
cameraMain.transform.DOPath(ve3, flo).SetEase(Ease.Linear).SetId(1).SetLookAt (0.01f).OnComplete(()=> { });
54.webgl发送请求有中文需要把中文转义的API
System.Web.HttpUtility.UrlEncode(ToString(), System.Text.Encoding.UTF8)
55.把字符串转换成枚举
1.MType是枚举类型
(MType)Enum.Parse(typeof(MType), this.name.ToString())
56.脚本自动添加组件(没有了自动添加)API
[RequireComponent(typeof(Rigidbody))]
57.把字符串转成浏览器可以下载识别的字符串
System.Net.WebUtility.UrlEncode((str))
58.字符串加转义和去转义
Regex.Escape(str); 加
Regex.Unescape(str); 去
59、协程的返回值使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!