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]

 

[Tooltip("显示注释")]      //鼠标移到变量上后可以看到汉字

[Header("显示注释")]    //直接在面板上显示汉字

 

 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))]

 

 

 

 

 

 

 

 

posted @ 2020-11-17 10:13  剑起苍穹  阅读(287)  评论(0编辑  收藏  举报
/*鼠标点击特效*/