(一)脚本介绍
1.脚本介绍:
附加在游戏物体上用于定义游戏对象行为的指令代码(.cs文件)就是一个类
支持三种高级编程语言:c# 、JavaScript;
unity自带开发工具:MonoDevelop 支持多个集成开发环境;visual studio 主要用这个
更改模板:unity--属性--打开文件位置--data--tools64--resource--scripttemplates--81-C#.txt
2.语法结构:
using 命名空间;//避免类重名
public class 类名:MonoBehaviour
{
void 方法名(){
Debug.Log("调试显示信息");
print(“本质就是Debug.Log方法”);
}
}
文件名和类名一致;写好的脚本必须附加到物体上才执行;附加到游戏物体的脚本类必须从MOnoBehavior类继承(实际上是,把类的实例对象交给了gameobject)
编译过程:源代码--CLS--中间语言(dll)--Mono Runtime--机器码
3.脚本生命周期:脚本从唤醒到销毁的过程
必然事件、消息:当满足某种条件unity自动调用的函数
搜索:unity5圣典--monobehaviour / un11ity组件旁边的小书
三个问题:名字 时机 适用性
初始阶段:Awake(物体载入立即调用;常用于游戏开始前进行初始化,可以判断当满足某种条件执行此脚本 this.enble=true) OnEnable(脚本启用就执行) Start
物理阶段:FixedUpdate Update LateUpdate(延迟更新 在update函数被调用后执行 适用于跟随逻辑 实际操作差别不大)
输入事件:OnMouseDown(前提是物体有碰撞器组件)OnMouseEnter OnMouseOver OnMouseUp OnMouseExit
场景渲染:OnBecameVisible 当Mesh Renderer在任何摄像机上可见 OnBecameInVisible:都不可见
结束阶段:OnDestroy (当脚本或者游戏对象销毁) Ondisable(当对象不可用时激活 或者复数游戏对象非激活)OnApplicationQuit(当程序结束)
新建Lifecycle.cs文件,代码示例1:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 脚本生命周期/必然事件/消息 Message
/// </summary>
public class Lifecycle : MonoBehaviour
{
//C#:字段 属性 构造函数 方法
//脚本:字段 方法
public int a=100;//public的对象,在检查器中能显示,可快速更改数据 100是默认情况
//序列化字段 作用:在编辑器中显示私有变量
[SerializeField]
private int b = 100;//不希望被访问 但是希望检查器能看见
//在编译器中隐藏字段 可访问
[HideInInspector]
public int c = 100;
//在编译器中修改的时候有范围限制
[Range(0,100)]
public int d = 50;
//属性在检查器看不见,在脚本中一般不写
public int A
{
get
{
return this.a;
}
set
{
this.a = value;
}
}
//错误情况:不能在子线程中访问主线程成员
//不要在脚本中写构造函数
/*
public float e;
public Lifecycle()
{
e = Time.time;
Debug.Log("构造函数");//相当于writeline 运行时在控制台
}
*/
//**********************初始阶段***********************//
//执行时机:创建游戏对象 执行1次
//作用:初始化
private void Awake()
{
Debug.Log("Awake"+Time.time+"--"+this.name);//Awake0 表示0秒被执行
}
//所有物体的awake执行后再start 但是awake暂时不可以规定谁先
//执行时机:游戏物体创建 脚本启用后 执行1次
//作用:初始化
private void Start()
{
Debug.Log("Start" + Time.time + this.name);//先Awake再Start
}
//**********************物理阶段***********************//
//执行时机:每隔固定时间(0.02)执行(可以修改 不建议)
//适用性:适用于对对象进行物理操作(移动、旋转等) 不会受到渲染影响
//渲染时间不固定 (每帧渲染量不同、机器性能不同)
private void FixedUpdate()
{
Debug.Log("FixedUpdate" + Time.time + "--" + this.name);
}
//执行时机:渲染帧执行,执行间隔不固定
//适用性:处理游戏逻辑 按帧移动
private void Update()
{
}
private void OnMouseDown()
{
Debug.Log("OnMouseDown");
}
private void OnMouseEnter()
{
}
}