unity基础知识 方法调用

Unity函数生命周期

Awake > OnEnble > Start > FixedUpdate > Update > LateUpdate > OnGUI > OnDisable > OnDestroy

Awake在开始前执行一次

OnEnble在脚本开始时执行一次(关闭后再开启依然执行)

Start在开始时执行一次

FixedUpdate在Update之前执行n次,多应用于物理引擎的计算,比如摩擦力,阻力,动力等计算都在该函数中,在每秒会执行固定次数(锁帧)

Update每帧执行一次,多应用于鼠标与键盘时间以及常规的逻辑操作。

LateUpdate在Update之后执行一次,多用于移动摄像机。

OnGUI每帧执行两次

OnDisable每次关闭脚本时执行一次(开启后在关闭依然执行)

OnDestroy删除脚本或物体时执行一次,应用于释放资源的时候。

OnApplicationPause(bool pauseStatus)当程序进入后台时执行,可以获取手机端摁下回到主页按钮,可以在这个方法里参数为true时截取屏幕

Time.timeScale=0.1f 将时间缓慢十倍
Time.timeScale=0 时间暂停
Time.fixedTime 显示游戏运行的时间
Time.fixedDeltaTime 显示固定间隔帧数(FixedUpdate)
Time.fixedUnscaledTime 显示游戏运行时间(不受时间减速和暂停的影响)

Objuct.DestroyImmediate <保存属性的变量>()传入一个保存属性的变量(例如Rigidbody a 的那个 a),删除那个属性


GameObject.SendMessage("HandAttachedUpdate", this, SendMessageOptions.DontRequireReceiver)搜索物体上的脚本并调用上面同名的方法
第一个参数为搜索的方法的名字,第二个参数和第三个参数之知道是固定格式,暂不明使用方法


[System.Serializable]使脚本中的类即使不继承Mono类也能应用(实例化)

GameObJect.FindGameObjectWithTag("name");寻找场景中标签是name的第一个物体.

transfrom.localPosition代表物体的相对坐标

gameObjuct.transfrom.position+=Vector3.forword;根据世界坐标移动你的物体

[MenuItem("主菜单/子菜单")]在菜单栏创建菜单选项,并且每次点击该菜单选项时执行该语句下面的公有静态方法

编辑器操作

引用数据库

using UnityEditor;

注意:引用了UnityEditor数据库的脚本必须放在Editor文件夹内,否则将无法导出

将方法定义为静态方法,然后前面增加[MenuItem("xx/xx")]来将其转换为快捷菜单工具,两个xx分别时菜单显示的文字

foreach (var g in Selection.gameObjects){xxx}  遍历所有你选中的物体并对其进行操作

foreach (Transform t in GameObject.FindObjectsOfType<Transform>())) 遍历场景中所有的物体或任何带参数属性的物体

[MenuItem("xx/xx #D")]按下Shift + D执行写下的快捷菜单    #等于Shift    %等于Ctrl    &等于Alt 

---------------------Input类------------------------------

Input.Mouseposion 返回一个鼠标在屏幕上的相对位置。

Input.GetAxis(string);参数是Input属性中Axis里的值,根据内容决定返回值,逐渐从0到-1或1;

Input.GetKey(Keycode.??)参数枚举类,输入后返回ture
Input.GetKeyDown
Input.GetKeyUp字面含义

Input.GetMouse按鼠标持续执行
Input.GetMouseDown
Input.GetMouseUp字面意思


Quaternion.LookatRotation(target.position-mytransform.position) 判断参数一相对于参数二的角度


GameObject.activeSelf     返回一个bool值,返回的是这个物体是否为开启或关闭状态(不能判断自己,自己关闭的时候代码不会执行)


GameObjuct类


GameObjuct.Instantiate(GameObjuct) 根据传入的参数克隆一个物体。

GameObjuct.Instantiate(GameObjuct,Transfrom)和传入进来的第二个参数建立父子关系。

GameObjuct = null 释放加载进来的内存

GameObject.CreatePrimitive(PrimitiveType.枚举)代码创建物体(枚举中选择创建物体)

Materal相关

gameObject.GetComponent<MeshRenderer>().material = xxx; 改变物体临时材质球

gameObject.GetComponent<MeshRenderer>().sharedMaterial = xxx;永久改变物体材质球

material和sharedMaterial的区别:改变materiral时,材质将会自动克隆一个新材质并覆盖自己,不会改变原本的材质,只是临时更变,而改变sharedMaterial时,将会永久的对材质产生改变,以至于影响以后的使用

gameObject.GetComponent<MeshRenderer>().sharedMaterial.SetTexture("_MainTex",Texture);改变材质球的位图为参数二

gameObject.GetComponent<MeshRenderer>().sharedMaterial.GetTexture("_MainTex");获取材质球的位图 

gameObject.GetComponent<MeshRenderer>().sharedMaterial.SetTexture("_MetallicGlossMap",Texture);改变材质球的金属贴图为参数二

gameObject.GetComponent<MeshRenderer>().sharedMaterial.GetTexture("_MetallicGlossMap");获取材质球的金属贴图

gameObject.GetComponent<MeshRenderer>().sharedMaterial.SetTexture("_BumpMap",Texture);改变材质球的法线贴图为参数二

gameObject.GetComponent<MeshRenderer>().sharedMaterial.GetTexture("_BumpMap");获取材质球的法线贴图

(其他的可以在Shader里面找,可以在材质球右上角选择Select Shader然后点击Shader上的按钮打开Shader,再根据Matearl上的变量名字找到Shader中对应的名字作为方法的参数)

场景操作

SceneManager.LoadScene(string);   加载场景方法,传入的参数为需要加载的场景名,(场景必须存在于Builliding界面中)
SceneManager(静态).sceneLoaded += void (Scene , LoadSceneMode) 为场景切换事件添加一个委托,每次切换场景的时候会调用一次委托,其中第一个参数可以获得到切换过来之前的哪一个场景,第二个参数用法未知

Application.Quit();退出当前场景

#if UNITY_EDITOR  #else  #endif 在编辑器状态下执行#if 非编辑器状态下执行#else  #endif时退出

UnityEditor.EditorApplication.isPlaying = false;关闭Unity编辑器的运行状态,赋值为true则为开启

实例:

#if UNITY_EDITOR

                            UnityEditor.EditorApplication.isPlaying = false;
#else
                            Application.Quit();
#endif

射线:

Ray ray = new ray (Vector3 , Vector3 );传入两个Vector3类型的参数,射线由第一个参数为起点射出,第二个参数需要传入一个向量,如果是发射到一个坐标就是传入的参数就是目标坐标减起点坐标;
Ray ray = Camera(Camera.mian 或者public Camera xx).ScreenPointToRay(Input.mousePosition);在你的摄像机向鼠标位置发射出去一条射线;
if(Physics.Raycast(ray,out Raycasthit)  通过if检测射线是否碰撞物体,并返回碰撞物体到Raycasthit变量上。
Raycasthit [] hits = Physics.RaycastAll(ray)   返回射线检测到的所有物体的集合

if (Physics.Raycast(ray1, out hit1,500,mask))  传入的第四个参数可以设置忽略的图层

LayerMask mask = 1 << 2; 表示开启Layer2。

LayerMask mask = 0 << 5;表示关闭Layer5。

LayerMask mask = 1<<2|1<<8;表示开启Layer2和Layer8。

LayerMask mask = 0<<3|0<<7;表示关闭Layer3和Layer7。


Raycasthit.point 射线所发生碰撞的点
Raycasthit.distance 射线起始点和目标点直接的长度
Raycasthit.collider.gameObject 返回被碰撞的物体本身

RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);//向鼠标位置发射一条射线并返回第一个碰撞器
 
RaycastHit2D[] hits = Physics2D.RaycastAll(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);//向鼠标位置发射一条射线并返回全部碰撞器
 
//上面的方法可以传入额外两个参数,第三个参数为射线的距离,第四个参数为射线忽略的层级,具体见上文

Collder [] collder = Physics.OverlapSphere ( Vector3,float )  //传入两个参数,根据第一个参数作为中心,第二个参数作为半径创建一个圆,返回这个圆中包含的所有碰撞体
(这个数组不会有距离排序的效果,请自行遍历每个的膜长判断距离)

Collider2D[] cods = Physics2D.OverlapCircleAll(Vector2, float;  //和上面的方法作用相同,这个方法为创建2d圆形

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值