脚本简介
语法结构
using 命名空间;
public class 类名: MonoBehaviour
{
void 方法名()
{
Debug.Log("调试显示信息");
print("本质就是Debug.Log方法");
}
}
开发工具:Visual Studio
Unity 控制台面板Console
Clear 清除所有信息
Collapse 折叠相同消息
Clear on Play 播放时清空消息
Error Pause 如果异常暂停执行
脚本生成周期
脚本生成周期指Unity 脚本从唤醒到销毁的过程。
这部分是unity脚本中的各种方法,之后会有部分的代码展示。
初始阶段
Awake 唤醒:
当物体载入时立即调用1次;常用于在游戏开始前进行初始化,(可以判断当满足某种条件执行此脚本this.enable=true 。)
OnEnable 当可用:
每当脚本对象启用时调用。
Start 开始:
物体载入且脚本对象启用时被调用1次。常用于数据或游戏逻辑初始化,执行时机晚于Awake。
物理阶段
FixedUpdate固定更新:
脚本启用后,固定时间被调用,适用于对游戏对象做物理操作,例如移动等。
设置更新频率:“Edit”-->“Project Setting”-->“Time”-->“Fixed Timestep”值,默认为0.02s.
输入事件
•OnCollisionXXX碰撞:当满足碰撞条件时调用。
•OnTriggerXXX触发:当满足触发条件时调用。
•OnMouseEnter鼠标移入:鼠标移入到当前Collider 时调用。
•OnMouseOver鼠标经过:鼠标经过当前Collider 时调用。
•OnMouseExit鼠标离开:鼠标离开当前Collider 时调用。
•OnMouseDown鼠标按下:鼠标按下当前Collider 时调用。
•OnMouseUp鼠标抬起:鼠标在当前Collider 上抬起时调用。
游戏逻辑
Update 更新:
脚本启用后,每次渲染场景时调用,频率与设备性能及渲染量有关。
LateUpdate 延迟更新:
在Update 函数被调用后执行,适用于跟随逻辑。(与Update在同一帧执行,只是有先后差别,实际操作时可以直接写进Update)
场景渲染
OnBecameVisible当可见:
当MeshRenderer 在任何相机上可见时调用。
OnBecameInvisible当不可见:
当MeshRenderer 在任何相机上都不可见时调用
结束阶段
OnDisable当不可用:
对象变为不可用或附属游戏对象非激活状态时此函数被调用。
OnDestroy当销毁:
当脚本销毁或附属的游戏对象被销毁时被调用。
OnApplicationQuit当程序结束:
应用程序退出时被调用。
public class Lifecycle : MonoBehaviour
{
//脚本: .cs的文本文件 类文件
// 附加到游戏物体重,定义游戏对象行为指令的代码
//c#类:
//字段
//属性
//构造函数
//方法
//脚本:
//字段
//方法
//序列化字段 作用:在编译器中显示私有变量
[SerializeField]
private int a;
//作用:在编译器中隐藏字段
[HideInInspector]
public float b;
//作用:给定数字的范围
[Range(0,100)]
public int c;
//属性:在编译器中不能显示,通常脚本中不写
//不要在脚本中写构造函数
//1.调用时机不是物体创建
//2.不能在子线程中访问主线程成员
//*************初始阶段***************
//Debug.Log() 在unity里的控制台输出
//Awake执行时机:创建游戏对象-->立即执行1次(早于Start)
//作用:初始化
private void Awake()
{
//Debug.Log("Awake--" + Time.time + "--" + this.name);
}
//Start执行时机:创建游戏对象-->脚本启用-->执行代码1次
//作用:初始化
private void Start()
{
Debug.Log("Start--" + Time.time + "--" + this.name);
}
//*************物理阶段***************
//FixedUpdate执行时机:每隔固定时间更新一次,默认值为0.02s执行一次
//适用性:适合对物体做物理操作(移动、旋转...),不会受到渲染影响
private void FixedUpdate()
{//渲染时间不固定(每帧渲染量不同、机器性能不同)
//Debug.Log(Time.time);
}
//每当鼠标点击游戏物体执行(前提是物体拥有碰撞组件Box Collider)
private void OnMouseDown()
{
Debug.Log("OnMouseDown");
}
//Update执行时机:渲染帧执行,执行间隔不固定
//适用性:适合处理游戏逻辑
private void Update() {}
}
API 函数库
API(Application Programming Interface)应用程序编程接口,是一些预先定义的函数。
函数实在是太多了,无法一一例举,在这里只写几个常用的。
常用API
Component
Component类提供了查找(在当前物体的后代与先辈)组件的功能
•常用属性
gameObject transform collider renderer……
•常用方法
GetComponent GetComponentInChildren GetComponentInParent……
Transform
Transform类提供了查找(父,根,子)变换组件、改变位置、角度 、大小功能
•常用属性
position localPosition parent forward……
•常用方法
Translate Rotate TransformPointFind SetSiblingIndex……
GameObject
•常用属性
transform activeInHierarchy activeSelftag……
•常用方法
AddComponentFind FindGameObjectsWithTag Object.FindObjectOfType……
ObJect
Object
•常用属性
name……
•常用方法
Instantiate Destroy FindObjectOfType FindObjectsOfType……