最近的内容主要是关于脚本与其他组件的关系。
关于组件的生命周期:
//出生时即执行,脚本被加载时调用一次
//在Awake中做一些初始化操作
void Awake(){
//初始化public成员}
//当对象开始时执行
void Start () {}
//每一帧都会执行
void Update () {
//一般每秒60帧,可以认为1秒调用60次}
//在Update方法调用之后调用
void LateUpdate(){
}
//在对象销毁时执行
void OnDestroy(){}
//在启用脚本时执行
void OnEnable(){
//可能需要在重新激活时重置的变量}
//在被不启用时执行
void Disable(){}
//持续调用
Void OnGUI(){
//IMGUI代码需要写在OnGUI方法中}
//以固定的频率调用,与图像的刷新帧速率无关
Void FixedUpdate(){
//处理物理的代码放在这里,放在update中可能因为卡顿导致问题}
//这些方法并不是继承自MonoBehaviour,而是通过反射调用的一些事件
//这些方法定义了一个脚本从被加载到被销毁的过程中脚本的生命周期
当然这些都是比较常用的,在官方manual中还有一张更详细的生命周期图。
以下是一部分关于脚本组件代码中的笔记:
每一个脚本类都继承自MonoBehaviour类,这些类叫做运行时类,不能手动实例化(仅受到Unity的控制)
gameObject //获取当前脚本挂载到的游戏对象
在Unity中就算使用了C#进行编写脚本,要输出时不能使用Console类,应当使用print();或者Debug.log();
transform表示该脚本挂载的游戏对象身上的transform组件
Transform.position //获取transform身上的各种属性,其他组件的其他属性同理
使用public在类中定义变量可以在unity属性面板中调节
GetComponent<>();//使用泛型的方法获取当前游戏对象上指定类型的组件对象
AddComponent<>(); //为当前游戏对象添加指定组件
随便写点:
void Start () {
print("print脚本挂载到了"+gameObject.name+"的身上");
gameObject.AddComponent<ParticleSystem>();//为当前对象添加一个粒子系统
ParticleSystem ps = gameObject.GetComponent<ParticleSystem>();//查询到这个粒子系统
Destroy(ps);//删除该粒子系统
}
using UnityEngine;
using System.Collections;
//使得一个对象的z轴看向目标lookat
public class LookAt : MonoBehaviour {
public Transform lookat;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
gameObject.transform.LookAt(lookat);
}
}