C#脚本
- 脚本是附加在游戏物体上用于定义游戏对象行为的指令代码
- 附加到游戏物体的脚本类必须从MonoBehaviour类继承
- 脚本初始化:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Demo01 : MonoBehaviour
{
// Start is called before the first frame update
private void Start()
{
}
// Update is called once per frame
private void Update()
{
}
}
- 脚本生命周期/必然事件/消息:unity脚本从唤醒到销毁的过程
- 脚本通常不写属性和构造函数,只写字段和方法
- 不写构造函数因为1.脚本是子线程,不能访问主线程成员
2.unity会多次在运行期间创建对象,与构造函数初衷不符
3.脚本生命周期
//序列化字段,在编译器中显示私有变量
[SerializeField]
private int a = 100;
//隐藏字段
[HideInInspector]
public int b = 200;
//范围
[Range(0,100)]
public int c;
//-------------------------生命周期--------------------------------------
//Awake先执行 创建游戏对象,立即执行
private void Awake()
{
Debug.Log("Awake" + Time.time.ToString()) ;
}
//Start后执行 创建游戏对象,脚本启用,才执行
private void Start()
{
Debug.Log("Awake" + Time.time);
}
//每隔固定时间0.02s修改一次 用于物体运动 不会受到渲染影响
private void FixedUpdate()
{
}
//渲染帧执行 适合处理游戏逻辑
private void Update()
{
}
//延迟更新
private void LateUpdate()
{
}
//-------------------------鼠标事件-----------------------------------
/*OnMouseEnter
* OnMouseOver
* OnMouseExit
* OnMouseDown
* OnMouseUp
*/
//-------------------------场景渲染-----------------------------------
//相机可见
static void OnBecameVisible()
{
}
//相机不可见
static void OnBecameInbisible()
{
}
//-------------------------结束阶段-----------------------------------
//OnDisable 当不可用
//OnDestroy 当销毁
//OnApplicationQuit 当程序结束
4.生命周期
5.print方法来自父类 MonoBehaviour 仅限在脚本中使用
6.1-8 单帧调试:启动调试 运行场景 暂停游戏 加断点 单帧执行 结束调试
7.深度优先遍历子组件
if (GUILayout.Button("GetComponents"))
{
var allComponent = this.GetComponentsInChildren<MeshRenderer>();
foreach(var item in allComponent)
{
Debug.Log(item.GetType());
}
}