Unity脚本的结构
每一个脚本就是一个类,只不过在类中没有之前的我们在C#中接触的Main方法了。我们写的逻辑代码需要直接或者在间接在Unity声明周期函数中调用。而且这样的类不需要通过实例化调用对象,只需要将脚本挂载到游戏对象上即可。根据之前的博客我们已经了解过,Unity是组件式开发。脚本也是一个组件。
MonoBehavior脚本和C#脚本的区别
- 不能new 如果脚本继承MonoBehavior,那么该类不能被new
- 有自己的声明周期
- 作为组件附加在GameObject上面
- 我们在创建脚本的时候,会默认继承MonoBehavior
控制台的输出
在写程序的时候我们通常会通过控制台来控制打印日志信息来配合程序的调试,这个区别于C#语言中的控制台的输出。详细的内容请参考以下的博客:
Unity_杂项_print和Debug.Log的区别_049
GameObject和Transform区别
- 特殊组件
- 共生体
- 互相可以获取
- 新组建的添加和删除
自定义类型
我们在创建脚本的时候,默认的都会继承自MonoBehaviour,如果需要其他的类型,我们也可以不继承自MonoBehaviour,有一点需要注意的就是,我们穿件的脚本的名字一定要和源码中的类名保持一致,否则就会报错
访问修饰符在Unity监控面板的表现
不同的访问修饰符在程序中的访问权限是不同的,在Unity面板中的表现也是不一样的,下面我们通过程序来看一下访问修饰符在Unity监控面板中的表现,请查考以下博文
Unity_杂项_访问修饰符在Unity监控面板的表现_050
Unity生命周期函数
常用的生命周期函数
Awake() 脚本启动
OnEnable() 脚本可用
Start() 脚本开始
Update() 脚本循环
OnDisable() 脚本不可用
OnDestroy() 脚本销毁
参考代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Function : MonoBehaviour {
//脚本最先执行的方法
//初始化变量 初始化组件
private void Awake()
{
print("Awake");
}
//脚本可用 脚本激活 不同于对象的激活
//游戏对象激活的时候会对自身的脚本激活
void OnEnable()
{
Debug.Log("OnEnable");
}
//游戏开始 晚于Awake
// Use this for initialization
void Start ()
{
}
//游戏就是一个死循环 在游戏开始的时候进入死循环
//不同于第一周所学的内容的的是,该死循环不是阻塞式的
//update是帧式的,每帧执行一次Update 每秒执行n帧
//在此方法中执行的是用于游戏的逻辑
// Update is called once per frame
void Update () {
Debug.Log("Update");
}
//脚本失活,不可用就执行
//可以多次执行
void OnDisable()
{
Debug.Log("OnDisable");
}
//脚本销毁执行
//脚本删除的一些还原或者清空数据的操作
void OnDestroy()
{
Debug.Log("OnDestroy");
}
}
声明周期函数图解
渲染
OnPreCull: 在相机剔除场景之前调用此函数。相机可见的对象取决于剔除。OnPreCull 函数调用发生在剔除之前。
OnBecameVisible/OnBecameInvisible: 在对象对于相机可见/不可见时调用此函数。
OnWillRenderObject: 如果对象可见,则为每个相机调用一次此函数。
OnPreRender: 在相机开始渲染场景之前调用此函数。
OnRenderObject: 在完成所有常规场景渲染后调用此函数。此时,可使用 GL 类或 Graphics.DrawMeshNow 绘制自定义几何图形。
OnPostRender: 在相机完成场景渲染后调用此函数。
OnRenderImage(仅限专业版): 在完成场景渲染后调用此函数,以便对屏幕图像进行后处理。
OnGUI: 在每帧上多次调用此函数,以响应 GUI 事件。程序首先将处理 Layout 和 Repaint 事件,然后再处理每个输入事件的 Layout 和 keyboard/鼠标事件。
OnDrawGizmos 用于在场景视图中绘制小图示 (Gizmos),以实现可视化目的。
生命周期图和渲染参考以下链接:
http://blog.csdn.net/akof1314/article/details/39323081/
Color 颜色
Color是一个结构类型,采用的是三原色,RGB。R就是Red,G就是Green,B就是Blue。RGB色彩模式是工业界的一种颜色标准,是通过对红®、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。
在此结构中,定义了一些常用的颜色,我们可以通过,Color.颜色名来获取单颜色;
public static Color black { get; }
//
// 摘要:
// ///
// Solid blue. RGBA is (0, 0, 1, 1).
// ///
public static Color blue { get; }
//
// 摘要:
// ///
// Completely transparent. RGBA is (0, 0, 0, 0).
// ///
public static Color clear { get; }
//
// 摘要:
// ///
// Cyan. RGBA is (0, 1, 1, 1).
// ///
public static Color cyan { get; }
//
// 摘要:
// ///
// Gray. RGBA is (0.5, 0.5, 0.5, 1).
// ///
public static Color gray { get; }
//
// 摘要:
// ///
// Solid green. RGBA is (0, 1, 0, 1).
// ///
public static Color green { get; }
//
// 摘要:
// ///
// English spelling for gray. RGBA is the same (0.5, 0.5, 0.5, 1).
// ///
public static Color grey { get; }
//
// 摘要:
// ///
// Magenta. RGBA is (1, 0, 1, 1).
// ///
public static Color magenta { get; }
//
// 摘要:
// ///
// Solid red. RGBA is (1, 0, 0, 1).
// ///
public static Color red { get; }
//
// 摘要:
// ///
// Solid white. RGBA is (1, 1, 1, 1).
// ///
public static Color white { get; }
//
// 摘要:
// ///
// Yellow. RGBA is (1, 0.92, 0.016, 1), but the color is nice to look at!
// ///
public static Color yellow { get; }
我们也可以通过程序来自己自定义颜色。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ColorTest : MonoBehaviour {
public Color m_color;
// Use this for initialization
void Start () {
//Random.Range(0, 1.0f) 我们通过该静态方法产生随机数 对于浮点类型来说该方法的两个参数是一个封闭的区间,换句话说,随机数可以取到0和1.0f
//但是对于整型int来说 是一个左闭右开的区间 即能取到左边的值但是取不到右边的值
m_color = new Color(Random.Range(0,1.0f), Random.Range(0, 1.0f), Random.Range(0, 1.0f));
}
}