【Unity】脚本开发基础

MonoBehaviour 类

Unity中的脚本都是继承自MonoBehaviour,它定义了基本的脚本行为,必然事件也是从 MonoBehaviour 继承而来。除了必然事件, MonoBehaviour还定义了对各种特定事件(例如模型碰撞、鼠标移动)的响应函数,这些函数均以 On 作为开头。

常用事件响应函数:

名称 用途
OnMouseEnter 鼠标移入GUI控件或者碰撞体时调用
OnMouseOver 鼠标停留在GUI控件或者碰撞体时调用
OnMouseExit 鼠标移出GUI控件或者碰撞体时调用
OnMouseDown 鼠标在GUI控件或者碰撞体上按下时调用
OnMouseUp 鼠标按键释放时调用
OnTriggerEnter 当其他碰撞体进入触发器时调用
OnTriggerExit 当其他碰撞体离开触发器时调用
OnTriggerStay 当其他碰撞体停留在触发器时调用
OnCollisionEnter 当碰撞体或者刚体与其他碰撞体或者刚体接触时调用
OnCollisionExit 当碰撞体或者刚体与其他碰撞体或者刚体停止接触时调用
OnCollisionStay 当碰撞体或者刚体与其他碰撞体或者刚体保持接触时调用
OnControllerColliderHit 当控制器移动时与碰撞体发生碰撞时调用
OnBecameVisible 对于任意一个相机可见时调用
OnBecameInvisible 对于任意一个相机不可见时调用
OnEnable 对象启用或者激活时调用
OnDisable 对象禁用或者取消激活时调用
OnDestroy 脚本销毁时调用
OnGUI 渲染GUI和处理GUI消息时调用

常用脚本API

Transform 组件:

transform组件控制游戏对象在Unity场景中的位置、旋转和大小比例,每个游戏对象都包含一个 Transform 组件。在游戏中如果想要更新玩家位置,设置相机观察角度都免不了要和Transform组件打交道。

Transform 组件的成员变量:

成员变量 说明
position 世界坐标系中的位置
localPosition 父对象局部坐标系中的位置
eulerAngles 世界坐标系中以欧拉角表示的旋转
localEulerAngles 父对象局部坐标系中的欧拉角
right 对象在世界坐标系中的右方向
up 对象在世界坐标系中的上方向
forward 对象在世界坐标系中的前方向
rotation 世界坐标系中以四元数表示的旋转
localRotation 父对象局部坐标系中以四元数表示的旋转
localScale 父对象局部坐标系中的缩放比例
parent 父对象的Transform 组件
worldToLocalMatrix 世界坐标系到局部坐标系的变换矩阵 (只读)
localToWorldMatrix 局部坐标系到世界坐标系的变换矩阵(只读)
root 对象层次关系中根对象的 Transform组件
childCount 子孙对象的数量
lossyScale 全局缩放比例(只读)

Transform组件的成员函数:

成员函数 说明
Translate 按指定的方向和距离移动
Rotate 按指定的欧拉角旋转
RotateAround 按给定旋转轴和欧拉角进行旋转
LookAt 旋转是的自身的前方巷指向目标的位置
TransformDirection 将一个方向从局部坐标系变换到世界坐标系
InverseTransformDirection 讲一个方向从世界坐标系变换到局部坐标系
TransformPoint 将一个位置从局部坐标系变换到世界坐标系
InverseTransformPoint 将一个位置从世界坐标系转换到局部坐标系
DetachChildren 与所有子物体解除父子关系
Find 按名称查找子对象
IsChildOf 判断是否是指定对象的子对象

Time类

Unity引擎提供的Time类可获取和时间有关的信息、计算帧速率、调整时间流逝速度等。

成员函数 说明
time 游戏从开始到现在经理的时间(秒)(只读)
timeSinceLevelLoad 此帧的开始时间(秒)(只读),从辞官加载完成开始计算
deltaTime 上一帧耗费的时间(秒)(只读)
fixedTime 最近FixedUpdate的时间。该时间从游戏开始计算
fixedDeltaTime 物理引擎和FixedUpdate的更新时间间隔
maximumDeltaTime 一帧的最大耗费时间
smoothDeltaTime Time.deltaTime的平滑淡出
timeScale 时间流逝速度的比例。可用来制作慢动作特效
frameCount 已渲染的帧的总数(只读)
realtimeSinceStartup 游戏从开始到现在经理的真实时间(秒),改时间不会受timeScale影响
captureFramerate 固定帧率设置
  • 示例代码
using UnityEngine;
using System.Collections;

public class TimeDemo : MonoBehaviour
{ 
        void OnGUI() { 
                GUILayout.Label("当前游戏经过的时间(秒):" + Time.time); 
                GUILayout.Label("游戏时间的缩放:" + Time.timeScale); 
                GUILayout.Label("上一帧所消耗的时间:" + Time.deltaTime); 
                GUILayout.Label("固定增量时间:" + Time.fixedTime); 
                GUILayout.Label("上一帧所消耗的固定时间:" + Time.fixedDeltaTime); 
                GUILayout.Label("当前游戏实际经过的时间:" + Time.realtimeSinceStartup); 
        }
}

Random类

Random类可以用来生成随机数。
Random类的成员变量:

成员变量 说明
seed 随机数生成器种子
value 返回一个0~1之间的随机浮点数,包含 0 和 1
insideUnitSphere 返回位域半径为1的求体内的一个随机点
insideUnitCircle 返回位域半径为1的圆内的一个随机点(只读)
onUnitSphere 返回半径为1的球面上的一个随机点(只读)
rotation 返回一个随机旋转(只读)
rotationUniform 返回一个均匀分布的随机旋转(只读)

Random类的成员变量:

成员函数 说明
Range 返回 min 和 max 之间的一个随机浮点数,包含 min 和 max
  • 概率事件示例代码

比如有一个抽奖活动,中奖概率为30%

if(Random.Range(0,1) < 0.3f){
     //执行中奖代码
}

Mathf类

主要是一些常用的数学函数
Mathf类的变量:

变量 说明
PI 圆周率π,即3.14159265358979...(只读)
Infinity 正无穷大 ∞(只读)
NegativeInfinity 负无穷大 - ∞ (只读)
Deg2Rad 度到弧度的转换系数(只读)
Rad2Deg 弧度到度的转换系数(只读)
Epsilon 一个很小的浮点数(只读)

Mathf类的常用方法:

常用方法 说明
Sin 计算角度(单位为弧度)的正弦值
Cos 计算角度(单位为弧度)的余弦值
Tan 计算角度(单位为弧度)的正切值
Asin 计算反正弦值(返回的角度值单位为弧度)
Acos 计算反余弦值(返回的角度值单位为弧度)
Atan 计算反正切值(返回的角度值单位为弧度)
Sqrt 计算平方根
Abs 计算绝对值
Min 返回若干数值中的最小值
Max 返回若干数值中的最大值
Pow Pow(f,p)返回 f 的 p 次方
Exp Exp(p) 返回 e 的 p 次方
Log 计算对数
Log10 计算基为10的对数
Ceil Ceil(f) 返回大于或等于 f 的最小整数
Floor Floor(f) 返回小于或等于f的最大整数
Round Round(f) 返回浮点数 f 进行四舍五入后得到的整数
Clamp 将数值限制在 min 和 max 之间
Clamp01 将数值限制在 0 和 1 之间

Coroutine协同程序

Coroutine也叫协同程序或者协程,协同程序可以和主程序并行运行,该类的功能和多线程有些类似,但是在任—指定时刻只会有一个协同程序在运行,别的协同程序则会挂起。

协同程序可以用来实现让一段程序等待一段时间后继续运行的效果。

与协同程序有关的函数:

函数 说明
StartCoroutine 启动一个协同程序
StopCoroutine 中指一个协同程序
StopAllCoroutines 中指所有协同程序
WaitForSeconds 等待若干秒
WaitForFixedUpdate 等待直到下一次 FixedUpdate调用
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 创建并运行脚本: unity 使用 C# 和 JavaScript 作为脚本语言,在创建一个脚本时会自动创建 St...
    Baqun阅读 3,150评论 0 5
  • 111. [动画系统]如何将其他类型的动画转换成关键帧动画? 动画->点缓存->关键帧 112. [动画]Unit...
    胤醚貔貅阅读 12,948评论 3 90
  • This article is a record of my journey to learn Game Deve...
    蔡子聪阅读 3,751评论 0 9
  • 皇者,古为上天,光明之意,因给予万物生机谓之皇。 帝者,生物之主,兴益之宗,因其有生育之功谓之帝。 皇为上,帝为下...
    赴京书生阅读 169评论 0 5
  • 我身边有很多朋友, 一直以来,因为和谁都能有话题,主要不是第一眼看上去气场不合的人,基本上都能聊。外人看我,总觉得...
    鲸鱼Alicece阅读 359评论 0 1