Unity重要脚本函数
一:Unity事件函数:
Unity中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制函数的回调,这就是事件函数。
对于初学者而言:先介绍最常用的两个:
Start:在Update函数之前进行调用,本函数仅调用一次。
Update:每帧执行一次,这是最常用的事件函数,大约一秒钟执行30-60次,依据个人计算机的性能而不同。
二:GameObject类:
GameObject类是所有Unity场景中的基类,但不是最终根类,它继承Object类,GameObject类最常用的属性与方法如表:
1.下面的实例展示对象的创建 克隆 销毁对象实例脚本:
/** * Title:"":项目 * 主题 :Unity脚本程序基础 * Description: * 功能:创建 克隆 销毁对象实例脚本 * Date:2017.11.06 * Version:Unity5.5.4 * Modify Recoder: * Operator:HaoYuHang * **/ using System.Collections; using System.Collections.Generic; using UnityEngine; public class Demo6_3DMaths : MonoBehaviour { #region 字段和属性定义 private GameObject _goCloneObj; #endregion void Start() { //创建游戏对象 GameObject goCreatObj = GameObject.CreatePrimitive(PrimitiveType.Cube); //材质添加 goCreatObj.GetComponent<Renderer>().material.color = Color.red; //添加名称 goCreatObj.name = "CubeName"; //对象的克隆 _goCloneObj = GameObject.Instantiate(goCreatObj); } void Update() { //对象的销毁 if (Input.GetKey(KeyCode.D)) { //2秒后销毁物体 GameObject.Destroy(_goCloneObj, 2f); } } #region 公共方法的定义 #endregion #region 私有方法的定义 #endregion }//class_end
2.添加组件脚本:
/** * Title:"":项目 * 主题 :Unity脚本程序基础 * Description: * 功能:动态的添加脚本 * Date:2017.11.06 * Version:Unity5.5.4 * Modify Recoder: * Operator:HaoYuHang * **/ using System.Collections; using System.Collections.Generic; using UnityEngine; public class Demo7_3DMaths : MonoBehaviour { #region 字段和属性定义 #endregion void Update() { if (Input.GetKeyDown(KeyCode.A)) { //动态的添加一个脚本 this.gameObject.AddComponent<Demo7_3DMaths_2>(); } } #region 公共方法的定义 #endregion #region 私有方法的定义 #endregion }//class_end
/** * Title:"":项目 * 主题 :Unity脚本程序基础 * Description: * 功能:物体的旋转 * Date:2017.11.06 * Version:Unity5.5.4 * Modify Recoder: * Operator:HaoYuHang * **/ using System.Collections; using System.Collections.Generic; using UnityEngine; public class Demo7_3DMaths_2 : MonoBehaviour { #region 字段和属性定义 #endregion void Update() { //物体旋转的代码 this.transform.Rotate(Vector3.up, Space.World); } #region 公共方法的定义 #endregion #region 私有方法的定义 #endregion }//class_end
3.获取组件脚本:
/** * Title:"":项目 * 主题 :Unity脚本程序基础 * Description: * 功能:获取当前游戏对象的脚本组件 * Date:2017.11.06 * Version:Unity5.5.4 * Modify Recoder: * Operator:HaoYuHang * **/ using System.Collections; using System.Collections.Generic; using UnityEngine; public class Demo8_3DMaths : MonoBehaviour { #region 字段和属性定义 #endregion void Start() { //使用GetComponent方法,做类之间的数值传递 int result = this.gameObject.GetComponent<Demo8_3DMaths_2>().GetValues(); string strRes = this.gameObject.GetComponent<Demo8_3DMaths_2>()._str; print(string.Format("得到数值:{0}", result)); print(string.Format("得到字符串:{0}", strRes)); } #region 公共方法的定义 #endregion #region 私有方法的定义 #endregion }//class_end
/** * Title:"":项目 * 主题 :Unity脚本程序基础 * Description: * 功能:被获取的脚本 * Date:2017.11.06 * Version:Unity5.5.4 * Modify Recoder: * Operator:HaoYuHang * **/ using System.Collections; using System.Collections.Generic; using UnityEngine; public class Demo8_3DMaths_2 : MonoBehaviour { #region 字段和属性定义 [HideInInspector] public string _str = "大家好"; #endregion #region 公共方法的定义 /// <summary> /// 得到数值 /// </summary> /// <returns>返回结果</returns> public int GetValues() { return 10; } #endregion }//class_end
4:游戏对象的查找:
/** * Title:"":项目 * 主题 :Unity脚本程序基础 * Description: * 功能:游戏对象的查找的脚本 * Date:2017.11.06 * Version:Unity5.5.4 * Modify Recoder: * Operator:HaoYuHang * **/ using System.Collections; using System.Collections.Generic; using UnityEngine; public class Demo9_3DMaths : MonoBehaviour { #region 字段和属性定义 #endregion void Start() { //按照“名称”进行全局的查找(不推荐使用) GameObject goObj1 = GameObject.Find("Cube"); //颜色的改变 goObj1.GetComponent<Renderer>().material.color = Color.red; //按照“标签”进行查找 GameObject goObj2 = GameObject.FindWithTag("Sphere"); goObj2.GetComponent<Renderer>().material.color = Color.blue; //按照“标签”查找返回对象数组 GameObject[] goObj3 = GameObject.FindGameObjectsWithTag("Capsule"); //使用循环遍历改变颜色 foreach (var goObj in goObj3) { goObj.GetComponent<Renderer>().material.color = Color.green; } } }//class_end
MonoBehaviour类:
在这里我们只是列举比较常用的方法和方法。
(1):实例方法:Invoke():调用函数。
(2):实例方法:InvokeRepeating():重复调用函数
(3):静态方法:Print():后台打印输出消息
请看下面的实例代码:
public class Demo12_Invoke : MonoBehaviour { void Start() { //调用函数:3f表示调用的时间 Invoke("DisplayInfo", 3f); //重复调用函数 //参数的含义: //5f:表示延迟调用的时间 //1f:表示重复调用函数的间隔的时间 InvokeRepeating("DisplayInfo_2", 5f, 1f); } private void DisplayInfo() { print("Display()方法被执行了"); } private void DisplayInfo_2() { print("Display_2()被执行了"); } }//class_end
Transform类:
Transform类继承了Component类,在场景中的每个对象,其属性窗口中都有一个变换,用来存储和处理游戏对象的位置、旋转和缩放的信息,如下图所示:
实例代码如下:
void Start() { //调整当前的游戏对象的位置、旋转、缩放 this.transform.position = new Vector3(2f, 3f, 4f); this.transform.eulerAngles = new Vector3(45f, 45f, 45f); this.transform.localScale = new Vector3(3f, 3f, 3f); }
Time类:
Time为Unity提供的时间类,用以记录、控制游戏项目中和时间有关系的操作。我们在这里只给出一个属性的详细的介绍:Time.deltaTime。
deltaTime:按照秒来计数,完成上一帧的时间(只读),常用使用这个函数产生于游戏帧速率无关的效果(使得游戏帧率独立)。如果我们加或者减一个值的时候,那么你就应该乘以时间,但是当我们乘以Time.deltaTime表示:我想移动这个物体10米每秒,而不是10米每帧。
public class Demo14_Time : MonoBehaviour { /// <summary> /// Update事件函数:单位时间内执行的次数是不一样的,与计算机的性能和具体的分配的资源有很大的关系 /// </summary> void Update() { print(string.Format("Time.DelteTime:{0}", Time.deltaTime)); if (Input.GetKey(KeyCode.W)) { this.transform.Translate(Vector3.forward * Time.deltaTime, Space.World); } else if (Input.GetKey(KeyCode.S)) { this.transform.Translate(Vector3.back * Time.deltaTime, Space.World); } } }//class_end