一、事件函数执行的先后顺序
FixedUpdate每秒执行固定次数,应该将处理跟物理相关的运动的代码放在FixedUpdate中。
Update和LateUpdate跟硬件和代码性能有关,每秒执行次数不固定。
二、Time类中的静态变量
Time.time 表示从游戏开始到现在的时间,会随着游戏的暂停而停止计算。
Time.timeSinceLevelLoad 表示从当前Scene加载完成到目前为止的时间,也会随着暂停操作而停止。
Time.deltaTime 表示从上一帧到当前帧(上一帧所消耗的)时间,以秒为单位。
Time.fixedTime 表示以秒计游戏开始的时间,固定时间以定期间隔更新(相当于fixedDeltaTime)直到达到time属性。
Time.fixedDeltaTime 表示以秒计间隔,在物理和其他固定帧率进行更新,在Edit->ProjectSettings->Time的Fixed Timestep可以自行设置。
Time.SmoothDeltaTime 表示一个平稳的deltaTime,根据前N帧的时间加权平均的值。
Time.timeScale 时间缩放,默认值为1,若设置<1,表示时间减慢,若设置>1,表示时间加快,可以用来加速和减速游戏,非常有用。
Time.frameCount 已渲染总帧数。
Time.realtimeSinceStartup 表示自游戏开始后的总时间,即使暂停也会不断的增加,也不受timeScale影响。
Time.captureFramerate 表示设置每秒的帧率,然后不考虑真实时间。
Time.unscaledDeltaTime 不考虑timescale时候与deltaTime相同,若timescale被设置,则无效。
Time.unscaledTime 不考虑timescale时候与time相同,若timescale被设置,则无效。
三、创建游戏物体的三种方法
1、通过构造方法创建
GameObject go = new GameObject();
2、通过GameObject.Instantiate()方法实例化
3、通过GameObject.CreatePrimitive()方法创建基本的游戏物体
创建出来的物体可以通过AddComponent<>添加组件。
四、游戏物体间消息的发送和接收
BroadcastMessage()向所有子物体包括自身广播消息。
SendMessage()向自身发送消息。
SendMessageUpwards()向所有父物体包括自身广播消息。
五、MonoBehaviour类
继承层次:Object->Component->Behaviour->MonoBehaviour
注意:复选框控件(在编辑中)仅仅会阻止Start、Awake、Update、FixedUpdate和OnGUI函数的执行,如果这些函数中没有一个出现,则复选框就不会显示。
调用方法Invoke(可用于延时):
CancelInvoke() 取消在这个脚本上的所有调用
void Invoke(string methodName, float time) 在time时间内调用名字为methodName的函数
void InvokeRepeating(string methodName, float time, float repeatRate) 在time时间内调用名字为methodName的函数,此后每
repeatRate秒就调用一次该函数
bool IsInvoking() 该MonoBehaviour上是否有等候调用的函数
协程:
StartCoroutine(IEnumerator routine) 开启一个协程,利用yield语句暂停在某点,yield返回值指定了什么时机协程恢复。对于多帧执行一次的行为非常适合用协程解决,它几乎没有什么性能开销。该函数总是会立即返回,然而可以yield结果,这样可以等到协程执行完成返回。使用javascript不需要显示调用该函数,因为编译器已经为你调用了,而C#中必须显示调用。
StartCoroutine(string methodName, object value = null) 开启指定名字的协程。主要应用的场合是,当使用指定函数名字来开启协程时,就可以使用StopCoroutine来终止指定名字的函数。限制是仅能传递一个参数,而且有更高的运行时代价。
StopAllCoroutines() 终止运行在该MonoBehaviour上的所有协程。
StopCoroutine(string methodName) 终止运行在该MonoBehaviour上名字为methodName的协程。仅仅StartCoroutine的字符串开启的协程才可以使用该函数进行终止。
消息:
void Reset(); 当脚本第一次被挂到object上或用户点击Inspector视图中Reset按钮时,Reset函数被调用来初始化脚本属性。Reset函数仅可以在编辑模式下被调用,最常用于在Inspector视图中呈现好的默认值。
void OnValidate(); 当脚本被加载或Inspector中某个值被改变时,该函数被调用,仅能在编辑器状态下使用。用于确保在编辑器中修改数据,该数据可以保持在特定范围内。
void OnLevelWasLoaded(int level); 当一个新的level被加载之后调用该函数,可以做协程。可以在File->Build Settings中看到该level具体指的是哪个Scene。
void Awake(); 游戏启动之前用于初始化任何变量和游戏状态,在脚本实例生命周期中仅被调用一次,不能做协程。Awake函数是在所有objects实例化之后被调用的,因而可以安全地同其它objects通信或查询等;同时,Awake函数是在任何Start函数之前被调用的,因而我们可以规定脚本的初始化顺序。objects之间Awake函数的调用没有先后顺序规定,因而可以利用Awake函数建立脚本之间的引用,再使用Start函数来回传递信息。(对于C#、Boo用户,当构造时组件序列化状态没有定义,就应该使用Awake代替构造函数来初始化)。
void Enable(); 只有object是激活状态下才可被调用,在object可用之后被调用,这通常发生于MonoBehaviour实例被创建时,不能做协程。
void Start(); 如果脚本实例是enabled的,则Start函数在第一帧更新之前被调用,在脚本实例生命周期中仅被调用一次。不论脚本enabled与否,Awake函数都会调用;假如初始化期间脚本disabled,则Start函数就不会与Awake函数在同一帧中被调用。Awake函数和OnEnable函数一定是在Start函数之前调用(好处是:object A实例化代码依赖于object B实例化,B的实例化就应该在Awake阶段完成,A的实例化就在Start阶段完成)。注意:对于添加到场景中的objects,所有脚本的Start函数都会在任何脚本调用Update等函数之前被调用。但是,在gameplay期间实例化objects,就不能强制遵循这个规则了。
void OnDisable(); 当行为不可用或非激活时,该函数被调用。当对象被销毁时,或对于任何清理工作的代码,该函数同样可被调用。当编译完成之后重新加载脚本,该函数可被调用,脚本加载完成时调用OnEnable函数。该函数不可以做协程。
void OnDestroy(); 在对象存在的最后一帧中,OnDestroy这个函数在所有帧更新之后被调用,该函数仅仅会在那些先前状态为active的对象上被调用。对象被销毁来响应Object.Destroy或关闭一个场景,该函数不可以是协程。
void FixedUpdate(); 假如MonoBehaviour是enabled时,该函数在固定帧率的每帧中被调用一次。比Update函数的调用更频繁;当帧率比较低时,每帧可被多次调用,如果帧率比较高,就可能不会被调用;所有的物理计算和更新都在FixedUpdate函数之后立即发生;当在FixedUpdate函数中计算物体移动时,不需要乘以Time.deltaTime,因为FixedUpdate函数是基于可靠的定时器,与帧率无关。
void Update(); 假如MonoBehaviour是enabled时,该函数每帧被调用一次,是最主要最常用的帧更新函数。为了得到从上一帧调用Update函数到现在消耗的时间,需要使用Time.deltaTime。
void LateUpdate(); 假如MonoBehaviour是enabled时,该函数每帧被调用一次,在Update函数之后执行;LateUpdate函数最常应用于第三人称的相机跟随。(如果将角色的移动和旋转放在Update函数中,则可以把相机的移动和旋转都放在LateUpdate函数,从而在相机追踪到角色位置之前,确保角色已经完成了移动。
注意:协程在所有Update函数完成后执行;若在LateUpdate中开启了一个协程,它将在LateUpdate之后渲染之前也会被调用。
void OnAnimatorIK(int layerIndex);动画组件在更新它内部Inverse Kinematics(IK)系统之前调用该函数。可用于设置IK目标位置和他们各自的权重。
void OnAnimatorMove(); 用于修改根运动而处理动画移动时调用。在状态机和动画计算完,OnAnimationIK之前,每帧都会被调用。
void OnAppllicationFocus(bool); 当玩家获得或失去焦点时,该消息被发送到所有游戏对象。该函数可以是协程,假如其作为协程来执行,在初始化帧期间会被用到两次:第一次用作前期消息通知,第二次发生在正常的协程更新步骤中。
void OnApplicationPause(bool); 当玩家暂停游戏,该消息会被发送给所有游戏对象。若暂停被检测到,当前帧执行后就调用OnApplicationPause函数,在正常的帧更新之间调用是有效的。在OnApplicationPause函数被调用后,增加额外的一帧来显示图像表明暂停状态。OnApplicationPause函数可以是协程,假如其作为协程来执行,在初始化帧期间会被用到两次:第一次用作前期消息通知,第二次发生在正常的协程更新步骤中。
void OnApplicationQuit(); 在应用退出之前所有的游戏对象都会调用该函数。在编辑器中当用户停止播放时它将被调用;在webplayer中,当网页关闭时被调用。注意,IOS应用通常暂停并不会退出,所以应该在IOS播放器设置中勾选“Exit on Suspend”,这样会使游戏退出而不是暂停。如果没有勾选就会调用OnApplicationPause函数。
void OnBecameInvisible();void OnBecameVisible(); 当object在任何相机中变得可见/不可见时被调用,该消息被发送到任何挂在渲染器上的脚本。使用这两个函数可以避免不必要的计算,仅当object可见时才进行相应的计算。它们可以是协程。当在编辑器中运行时,场景视图摄像机也会导致它们被调用。
void OnCollisionEnter(Collision collision); 当该碰撞器/刚体开始接触到另一个刚体/碰撞器的时候,该函数被调用,可以做协程。和OnTriggerEnter函数相比,OnCollisionEnter的参数是Collision类而不是Collider。Collision类包含接触点,碰撞速度等信息,如果不需要在函数中使用这些碰撞信息,就不要考虑碰撞信息,这样可以避免不必要的计算。注意:碰撞事件仅仅当其中一个碰撞器中的也有一个non-kinematic刚体挂在时才会被发送。
void OnCollisionEnter2D(Collision2D collision); 当传进来的Collider和对象的Collider有接触时该函数被调用(仅限于2D物理)。
void OnCollisionExit(Collision collision); 当该碰撞器/刚体停止碰撞另一个刚体/碰撞器时被调用,可以做协程。和TriggerExit函数相比,OnCollisionExit 参数是Collision类而不是Collider。Collision类包含接触点,碰撞速度等信息,如果不需要在函数中使用这些碰撞信息,就不要考虑碰撞信息,这样可以避免不必要的计算。注意:碰撞事件仅仅当其中一个碰撞器中的也有一个non-kinematic刚体挂在时才会被发送。
void OnCollisionExit2D(Collision2D collision); 当传进来的Collider和对象的Collider停止接触时该函数被调用(仅限于2D物理)。
void OnCollisionStay(Collision collision); 对于每一个正在碰触其他刚体/碰撞器的碰撞器/刚体,该函数每帧都会被调用一次,可以做协程。和OnTriggerStay函数相比,OnCollisionStay参数是Collision类而不是Collider。Collision类包含接触点,碰撞速度等信息,如果不需要在函数中使用这些碰撞信息,就不要考虑碰撞信息,这样可以避免不必要的计算。注意:碰撞事件仅仅当其中一个碰撞器中的也有一个non-kinematic刚体挂在时才会被发送。
void OnCollisionExitStay2D(Collision2D collision); 当一个对象的Collider和这个对象的Collider正在碰撞时该函数被调用(仅限于2D物理)。
void OnControllerColliderHit(ControllerColliderHit); 当控制器执行时移动时碰到一个Collider上,该函数被调用。当它们碰撞到角色上时被用于推开对象。
void OnParticleCollision(GameObject); 当一个粒子撞到碰撞器上时该函数被调用。用于游戏对象受粒子碰撞时的伤害计算。
void OnConnectedToServer(); 当成功连接到服务器时客户端调用该函数。
void OnDisconnectedFromServer(NetworkDisconnection); 当与服务器连接中断或终止连接时,该函数被调用。
void OnFailedToConnect(); 由于某些原因尝试连接失败时,客户端调用该函数。
void OnFailedToConnectToMasterServer(NetworkConnectionError); 连接到主服务器有问题时服务器端或客户端调用该函数。
void OnMasterServerEvent(MasterServerEvent); 当收到来自主服务器报告事件,该函数被客户端或服务器端调用。
void OnServerInitialized(); 不论何时Network.InitializeServer被触发并完成,服务器会调用该函数。
void OnSerializeNetworkView(BitStream, NetworkMessageInfo); 用于定制脚本中变量的同步,从网络的视角来看。自动决定是否序列化的变量应该被发送或接收。
void OnPlayerConnected(NetworkPlayer); 不论何时玩家成功连接到服务器时,服务器端调用该函数。
void OnPlayerDisconnected(NetworkPlayer); 不论何时玩家与服务器失去连接时,服务器端调用该函数。
void OnNetworkInstantiate(NetworkMessageInfo); 使用Network.Instantiate,对象被网络实例化时被调用。
void OnPreCull(); 在相机剔除场景前被调用,剔除确定了哪些物体在相机中是可见的。仅当脚本挂在相机上并且是enabled时,该函数才会被调用。假如要修改相机的可视化参数(比如FOV,Transform等),就应该在这个函数中进行修改,此后场景中objects的可见性就取决于相机的参数了。
void OnWillRenderObject(); 如果物体可见并且MonoBehaviour是enabled时,在渲染每个经过剔除操作之后的物体之前,它将为每个相机调用一次。
void OnPreRender(); 仅当脚本挂在相机上并且是enabled时,则在相机开始渲染场景之前被调用。假如在这个函数中修改了相机的可视化参数(比如FOV),那么这些参数只会在下一帧中起到作用。该函数可以是协程。
void OnPostRender(); 在相机完成场景的渲染后被调用。与OnRenderObject不同,仅当脚本挂在相机上并且是enabled时,该函数才会被调用。该函数可以做协程。假如想要在所有相机和GUI渲染之后做操作,使用WaitForEndOfFrame协程。
void OnRenderObject(); 在所有固定场景渲染之后被调用,此时你可以使用GL类函数或者Graphics.DrawMeshNow来画自定义的几何体。该函数和OnPostRender函数相似,除了一点:不论脚本挂在相机上与否,OnRenderObject函数都会在任何挂有定义了该函数的脚本的object上被调用。
void OnRenderImage(RenderTexture, RenderTexture); 在场景渲染完成后被调用,用于对屏幕的图像进行后处理,该消息被发送到挂到相机上的所有脚本。该函数允许利用基于shader的过滤器对最终图像进行处理,传入源渲染纹理,终止于目标渲染纹理;当相机有多个图像过滤器时,按照图像顺序进行处理,前一个过滤器的目标渲染纹理作为下一个过滤器的源渲染纹理。
void OnGUI(); 假如MonoBehaviour是disabled时,该函数不会被调用。为响应GUI事件,该函数每帧被调用多次,每个事件就调用一次;执行时先响应布局和重绘事件,随后是为每一次的输入事件执行布局和键盘/鼠标事件。
void OnDrawGizmos(); 为了可视化的目的,在场景视图中绘制小图标。该函数使用相对于Scene视图的鼠标的位置,允许快速挑选场景中重要的objects,当然假如组件在inspector中collapsed,则该函数就不会被调用。
void OnDrawGizmosSelected(); 同OnDrawGizmos,不过只有选中的物体执行。
void OnMouseEnter(); 当鼠标进入GUIElement或Collider时该函数被调用,该消息会被发送给Collider或GUIElement的所有脚本。该函数不能被属于忽略Raycast layer的对象来调用。可以做协程。
void OnMouseExit(); 当鼠标离开GUIElement或Collider时该函数被调用,该消息会被发送给Collider或GUIElement的所有脚本。该函数不能被属于忽略Raycast layer的对象来调用。可以做协程。
void OnMouseDown(); 当用户在GUIElement或Collider上按下鼠标时该函数被调用,该消息会被发送给Collider或GUIElement的所有脚本。该函数不能被属于忽略Raycast layer的对象来调用。可以做协程。
void OnMouseUp(); 当用户释放鼠标按键时,该函数被调用,即使鼠标已经不在和鼠标按下相同的一个GUIElement或Collider上时该函数被调用。可以做协程,该消息会被发送给Collider或GUIElement的所有脚本。该函数不能被属于忽略Raycast layer的对象来调用。
void OnMouseUpAsButton(); 当用户释放鼠标按键时,该函数被调用,只在和鼠标按下相同的一个GUIElement或Collider上时该函数被调用。可以做协程,该消息会被发送给Collider或GUIElement的所有脚本。该函数不能被属于忽略Raycast layer的对象来调用。
void OnMouseDrag(); 当用户在GUIElement或Collider上点击鼠标并一直按着时该函数被调用,按着鼠标的每一帧中该函数都会被调用,可以做协程,该消息会被发送给Collider或GUIElement的所有脚本。该函数不能被属于忽略Raycast layer的对象来调用。
void OnMouseOver(); 当鼠标在GUIElement或Collider上时该函数被调用,按着鼠标的每一帧中该函数都会被调用,可以做协程,该消息会被发送给Collider或GUIElement的所有脚本。该函数不能被属于忽略Raycast layer的对象来调用。
void OnTriggerEnter(Collider); 当碰撞器进入触发器时该函数被调用。该消息被发送给触发器碰撞器和碰到触发器的刚体(假如没有刚体就是碰撞器),但只有在其中一个碰撞器也有刚体挂载时,触发事件才会被发送。该函数可以做协程。
void OnTriggerEnter2D(Collider2D); 当另一个对象碰到这个对象上挂有的触发器碰撞器时,该消息被发送(仅仅2D物理适用)。
void OnTriggerExit(Collider); 当另一个碰撞器停止碰撞该触发器时该函数被调用。该消息被发送给触发器和碰撞触发器的碰撞器。注意,只有在其中一个碰撞器也有刚体挂载时,触发事件才会被发送。该函数可以做协程。
void OnTriggerExit2D(Collider2D); 当另一个对象离开这个对象上挂有的触发器碰撞器时,该消息被发送(仅仅2D物理适用)。
void OnTriggerStay(Collider); 对于每一个正在碰撞该触发器的碰撞器,该函数每帧被调用一次。该消息会被发送给触发器和碰撞该触发器的碰撞器,注意,只有在其中一个碰撞器也有刚体挂载时,触发事件才会被发送。该函数可以做协程。
void OnTriggerStay2D(Collider2D); 当另一个对象在该对象的触发器碰撞器内时该函数每帧被都会被调用。(仅仅2D物理适用)
void OnJointBreak(float); 当连接到同一游戏对象上的关节断裂时被调用。当外力高于关节的breakForce时,关节会断开。当关节断开时,该函数被调用,施加于关节处的断裂外力会被做为参数传入。当该函数完成后,关节会自动从游戏对象上移除。
六、Mathf类
Mathf.Abs 绝对值 计算并返回指定参数 f 绝对值。
Mathf.Acos 反余弦
static function Acos (f : float) : float 以弧度为单位计算并返回参数 f 中指定的数字的反余弦值。
Mathf.Approximately近似
static function Approximately (a : float, b: float) : bool 比较两个浮点数值,看它们是否非常接近, 由于浮点数值不精确,不建议使用等于来比较它们。例如,1.0==10.0/10.0也许不会返回true。
Mathf.Asin反正弦
static function Asin (f : float) : float 以弧度为单位计算并返回参数 f 中指定的数字的反正弦值。
Mathf.Atan2反正切
static function Atan2 (y : float, x :float) : float 以弧度为单位计算并返回 y/x 的反正切值。返回值表示相对直角三角形对角的角,其中 x 是临边边长,而 y 是对边边长。
返回值是在x轴和一个二维向量开始于0个结束在(x,y)处之间的角。
Mathf.Atan反正切
static function Atan (f : float) :float 计算并返回参数 f 中指定的数字的反正切值。返回值介于负二分之 pi 与正二分之 pi 之间。
Mathf.CeilToInt最小整数
static function CeilToInt (f : float) : int 返回最小的整数大于或等于f。
Mathf.Ceil上限值
static function Ceil (f : float) : float 返回 f 指定数字或表达式的上限值。数字的上限值是大于等于该数字的最接近的整数。
Mathf.Clamp01限制0~1
static function Clamp01 (value : float) :float 限制value在0,1之间并返回value。如果value小于0,返回0。如果value大于1,返回1,否则返回value 。
Mathf.Clamp限制
static function Clamp (value : float, min :float, max : float) : float 限制value的值在min和max之间, 如果value小于min,返回min。 如果value大于max,返回max,否则返回value
static function Clamp (value : int, min :int, max : int) : int 限制value的值在min和max之间,并返回value。
Mathf.ClosestPowerOfTwo最近的二次方
static function ClosestPowerOfTwo (value :int) : int 返回距离value最近的2的次方数。
Mathf.Cos余弦
static function Cos (f : float) : float 返回由参数 f 指定的角的余弦值(介于 -1.0 与 1.0 之间的值)。
Mathf.Deg2Rad度转弧度
static var Deg2Rad : float 度到弧度的转化常量。(只读) 这等于(PI * 2) / 360。
Mathf.Mathf.Rad2Deg 弧度转度
static var Rad2Deg : float 弧度到度的转化常量。(只读) 这等于 360 / (PI * 2)。
Mathf.DeltaAngle增量角
static function DeltaAngle (current :float, target : float) : float 计算给定的两个角之间最短的差异。
Mathf.Epsilon小正数
static var Epsilon : float 一个很小的浮点数值。(只读) 最小的浮点值,不同于0。
以下规则:
- anyValue + Epsilon = anyValue
- anyValue - Epsilon = anyValue
- 0 + Epsilon = Epsilon
- 0 - Epsilon = -Epsilon
一个在任意数和Epsilon的之间值将导致在任意数发生截断误差。
Mathf.Exp指数
static function Exp (power : float) : float 返回 e 的 power 次方的值。
Mathf.FloorToInt最大整数
static function FloorToInt (f : float) :int 返回最大的整数,小于或等于f。
Mathf.Floor下限值
static function Floor (f : float) : float 返回参数 f 中指定的数字或表达式的下限值。下限值是小于等于指定数字或表达式的最接近的整数。
Mathf.Infinity正无穷
static var Infinity : float 表示正无穷,也就是无穷大,∞ (只读)
Mathf.InverseLerp反插值 计算两个值之间的Lerp参数。也就是value在from和to之间的比例值。
Mathf.IsPowerOfTwo是否2的幂
static function IsPowerOfTwo (value : int): bool 如果该值是2的幂,返回true。
Mathf.LerpAngle插值角度
static function LerpAngle (a : float, b :float, t : float) : float 和Lerp的原理一样,当他们环绕360度确保插值正确。 a和b是代表度数。
Mathf.Lerp插值
static function Lerp (from : float, to :float, t : float) : float 基于浮点数t返回a到b之间的插值,t限制在0~1之间。 当t = 0返回from,当t = 1 返回to。当t = 0.5 返回from和to的平均值。
Mathf.Log10基数10的对数
static function Log10 (f : float) : float 返回f的对数,基数为10。
Mathf.Log对数
static function Log (f : float, p : float): float 返回参数 f 的对数。
Mathf.Max最大值
static function Max (a : float, b : float): float
static function Max (params values :float[]) : float
返回两个或更多值中最大的值。
Mathf.Min最小值
static function Min (a : float, b : float): float
static function Min (params values :float[]) : float
返回两个或更多值中最小的值。
Mathf.MoveTowardsAngle移动角
static function MoveTowardsAngle (current :float, target : float, maxDelta : float) : float
像MoveTowards,但是当它们环绕360度确保插值正确。
变量current和target是作为度数。为优化原因,maxDelta负值的不被支持,可能引起振荡。从target角推开current,添加180度角代替。
Mathf.MoveTowards移向
static function MoveTowards (current :float, target : float, maxDelta : float) : float
改变一个当前值向目标值靠近。
这实际上和 Mathf.Lerp相同,而是该函数将确保我们的速度不会超过maxDelta。maxDelta为负值将目标从推离。
Mathf.NegativeInfinity负无穷
static var NegativeInfinity : float 表示负无穷,也就是无穷小,-∞(只读)
Mathf.NextPowerOfTwo下个2的幂
Mathf.PingPong乒乓
static function PingPong (t : float, length: float) : float
0到length之间往返。t值永远不会大于length的值,也永远不会小于0。
The returned value will move back and forthbetween 0 and length.
返回值将在0和length之间来回移动。
Mathf.PI圆周率
static var PI : float PI(读pai)的值,也就是圆周率(π)的值3.14159265358979323846...(只读)
Mathf.Pow次方
static function Pow (f : float, p : float): float 计算并返回 f 的 p 次方。
Mathf.Repeat重复
static function Repeat (t : float, length :float) : float
循环数值t,0到length之间。t值永远不会大于length的值,也永远不会小于0。 这是类似于模运算符,但可以使用浮点数。
Mathf.RoundToInt四舍五入到整数
static function RoundToInt (f : float) :int
返回 f 指定的值四舍五入到最近的整数。 如果数字末尾是.5,因此它是在两个整数中间,不管是偶数或是奇数,将返回偶数。
Mathf.Round四舍五入
static function Round (f : float) : float
返回浮点数 f 进行四舍五入最接近的整数。 如果数字末尾是.5,因此它是在两个整数中间,不管是偶数或是奇数,将返回偶数。
Mathf.Sign符号
static function Sign (f : float) : float 返回 f 的符号。 当 f 为正或为0返回1,为负返回-1。
Mathf.Sin正弦
static function Sin (f : float) : float 计算并返回以弧度为单位指定的角 f 的正弦值。
Mathf.SmoothDampAngle平滑阻尼角度
static function SmoothDampAngle (current :float, target : float, ref currentVelocity : float, smoothTime : float,maxSpeed : float = Mathf.Infinity, deltaTime : float = Time.deltaTime) : float
参数
current
当前的位置。
target
我们试图达到的位置。
currentVelocity
当前速度,这个值在你访问这个函数的时候会被随时修改。
smoothTime
the target faster.
要到达目标位置的近似时间,实际到达目标时要快一些。
maxSpeed
可选参数,允许你限制的最大速度。
deltaTime
上次调用该函数到现在的时间。缺省为Time.deltaTime。
随着时间的推移逐渐改变一个给定的角度到期望的角度。
这个值通过一些弹簧减震器类似的功能被平滑。这个函数可以用来平滑任何一种值,位置,颜色,标量。最常见的是平滑一个跟随摄像机。
Mathf.SmoothDamp平滑阻尼
static function SmoothDamp (current :float, target : float, ref currentVelocity : float, smoothTime : float,maxSpeed : float = Mathf.Infinity, deltaTime : float = Time.deltaTime) : float
参数
current
当前的位置。
target
我们试图达到的位置。
currentVelocity
当前速度,这个值在你访问这个函数的时候会被随时修改。
smoothTime
要到达目标位置的近似时间,实际到达目标时要快一些。
maxSpeed
可选参数,允许你限制的最大速度。
deltaTime
上次调用该函数到现在的时间。缺省为Time.deltaTime。
描述
随着时间的推移逐渐改变一个值到期望值。
这个值就像被一个不会崩溃的弹簧减振器一样被平滑。这个函数可以用来平滑任何类型的值,位置,颜色,标量。
Mathf.SmoothStep平滑插值
static function SmoothStep (from : float,to : float, t : float) : float
和lerp类似,在最小和最大值之间的插值,并在限制处渐入渐出。
Mathf.Sqrt平方根
static function Sqrt (f : float) : float 计算并返回 f 的平方根。
Mathf.Tan正切
static function Tan (f : float) : float 计算并返回以弧度为单位 f 指定角度的正切值。
七、Quaternion类
常用变量:
identity 不旋转
eulerAngles 将四元数转换成欧拉角
常用方法:
Euler 将欧拉角转换成四元数
LookRotation 设置朝向
- Vector3 dir = enemy.position - player.position;
- dir.y = 0;
- player.rotation= Quaternion.LookRotation(dir); //设置Player朝向Enemy
- Vector3 dir = enemy.position - player.position;
- dir.y = 0;
- Quaternion target = Quaternion.LookRotation(dir);
- player.rotation = Quaternion.Slerp(player.rotation, target, Time.deltaTime);
position 如果使用Rigidbody.position更改Rigibody的位置,则在下一个物理模拟步骤之后将会更新Transform。这比使用Transform.position更新位置要快,因为后者将导致所有附加的Colliders重新计算它们相对于Rigidbody的位置。如果想连续移动一个刚体,使用MovePosition来代替。
MovePosition 调用Rigidbody.MovePosition会导致渲染的任何中间帧中两个位置之间的平滑过渡。如果要在每个FixedUpdate中连续移动刚体,则应该使用此选项。 如果想将一个刚体从一个位置直接传送到另一个位置,不需要渲染中间位置,使用position设置位置。 如果刚体is Kinematic设置为false,调用Rigidbody.MovePosition还是会将一个刚体从一个位置直接传送到另一个位置。
- playerRigidbody.position = playerRigidbody.position + Vector3.forward * Time.deltaTime * 100;//使用Rigidbody.position更改Rigibody的位置
- playerRigidbody.MovePosition(playerRigidbody.position + Vector3.forward * Time.deltaTime * 100);//使用MovePosition来代替rotation
AddForce 给刚体添加一个力(指定方向和大小)。
九、Application
dataPath 包含游戏数据文件夹的路径,不同平台路径不同。
streamingAssetsPath 在Unity项目的Assets下创建streamingAssets文件夹,保存包括视频、音频、AssetBundle资源,这些资源不会被打包。
http://blog.csdn.net/u011325034/article/details/49327225
http://www.jianshu.com/p/617789c9919a
https://www.cnblogs.com/colve/p/5149847.html
.........
十、SceneManager
sceneCount场景的总数。
sceneCountInBuildSettings在BuildSettings中的场景数量。
CreateScene 创建一个空的新场景并指定名称。
GetActiveScene获取激活的场景。
GetSceneAt获取在场景管理列表添加场景的索引。
GetSceneByName 通过场景添加到场景管理器的指定名称查找该场景。
GetSceneByPath 查找所有给定资源路径并添加到SceneManager中的场景。
LoadScene 通过在Build Settings中它们的名称或索引加载场景。
LoadSceneAsync 在后台异步加载场景。
MergeScenes 该属性将场景资源合并到destinationScene。该函数合并场景资源内容到目的场景并删除原场景资源。所有根资源场景下的物体移动到根目的场景目录下。注意:该函数是有破坏性的:当资源合并完成后原有资源场景将会被立刻销毁。
MoveGameObjectToScene 移动一个物体从它当前场景到一个新的场景中。它必须要求该物体在当前场景的根目录下。
SetActiveScene 设置被激活的场景。
UnloadScene 卸载所有和指定场景关联的物体。
在Unity3D脚本中,有几个Unity3D自带的事件函数按照预定的顺序执行作为脚本执行。其执行顺序如下:
编辑器(Editor)
- Reset:Reset函数被调用来初始化脚本属性当脚本第一次被附到对象上,并且在Reset命令被使用时也会调用。
编者注:Reset是在用户点击Inspector面板上Reset按钮或者首次添加该组件时被调用。Reset最常用于在见识面板中给定一个默认值。
第一次场景加载(First Scene Load)
这些函数会在一个场景开始(场景中每个物体只调用一次)时被调用。
- Awake:这个函数总是在任何Start()函数之前一个预设被实例化之后被调用,如果一个GameObject是非激活的(inactive),在启动期间Awake函数是不会被调用的直到它是活动的(active)。
- OnEnable:只有在对象是激活(active)状态下才会被调用,这个函数只有在object被启用(enable)后才会调用。这会发生在一个MonoBehaviour实例被创建,例如当一个关卡被加载或者一个带有脚本组件的GameObject被实例化。
注意:当一个场景被添加到场景中,所有脚本上的Awake()和OnEable()函数将会被调用在Start()、Update()等它们中任何函数被调用之前。自然的,当一个物体在游戏过程中被实例化时这不能被强制执行。
第一帧更新之前(Before the first frame update)
- Start:只要脚本实例被启用了Start()函数将会在Update()函数第一帧之前被调用。
对于那些被添加到场景中的物体,所有脚本上的Start()函数将会在它们中任何的Update()函数之前被调用,自然的,当一个物体在游戏过程中被实例化时这不能被强制执行。
在帧之间(In between frames)
- OnApplicationPause:这个函数将会被调用在暂停被检测有效的在正常的帧更新之间的一帧的结束时。在OnApplicationPause被调用后将会有额外的一帧用来允许游戏显示显示图像表示在暂停状态下。
更新顺序(Update Order)
当你在跟踪游戏逻辑和状态,动画,相机位置等的时候,有几个不同的事件函数你可以使用。常见的模式是在Update()函数中执行大多数任务,但是也有其它的函数你可以使用。
- FixedUpdate:FixedUpdate函数经常会比Update函数更频繁的被调用。它一帧会被调用多次,如果帧率低它可能不会在帧之间被调用,就算帧率是高的。所有的图形计算和更新在FixedUpdate之后会立即执行。当在FixedUpdate里执行移动计算,你并不需要Time.deltaTime乘以你的值,这是因为FixedUpdate是按真实时间,独立于帧率被调用的。
- Update:Update每一帧都会被调用,对于帧更新它是主要的负荷函数。
- LateUpdate:LateUpdate会在Update结束之后每一帧被调用,任何计算在Update里执行结束当LateUpdate开始时。LateUpdate常用为第三人称视角相机跟随。
渲染(Rendering)
- OnPreCull:在相机剔除场景前被调用。剔除是取决于哪些物体对于摄像机是可见的,OnPreCull仅在剔除起作用之前被调用。
- OnBecameVisible/OnBecameInvisible:当一个物体对任意摄像机变得可见/不可见时被调用。
- OnPreRender:在摄像机开始渲染场景之前调用。
- OnRenderObject:在指定场景渲染完成之后调用,你可以使用GL类或者Graphics.DrawMeshNow 来绘制自定义几何体在这里。
- OnPostRender:在摄像机完成场景渲染之后调用。
- OnRenderImage(Pro Only):在场景徐然完成之后允许屏幕图像后期处理调用。
- OnGUI:为了响应GUI事件,每帧会被调用多次(一般最低两次)。布局Layout和Repaint事件会首先处理,接下来处理的是是通过
Layout和键盘/鼠标事件对应的每个输入事件。 - OnDrawGizmos:用于可视化的绘制一些小玩意在场景视图中。
协同程序(Coroutines)
正常的协同程序更新是在Update函数返回之后运行。一个协同程序是可以暂停执行(yield)直到给出的依从指令(YieldInstruction )完成,写成的不同运用:
- yield:在所有的Update函数都已经被调用的下一帧该协程将持续执行。
- yield WaitForSeconds:一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后。
- yield WaitForFixedUpdate:所有脚本上的FixedUpdate函数已经执行调用之后持续。
- yield WWW:在WWW下载完成之后持续。
- yield StartCoroutine:协同程序链,将会等到MuFunc函数协程执行完成首先。
销毁(When the Object is Destroyed)
- OnDestory:这个函数在会在一个对象销毁前一帧调用,会在所有帧更新一个对象存在的最后一帧之后执行,对象也许会响应Object.Destroy 或一个场景关闭时被销毁。
退出游戏(When Quitting)
这些函数会在你场景中所有的激活的物体上调用:
- OnApplicationQuit:这个函数在应用退出之前的所有游戏物体上调用,在编辑器(Editor)模式中会在用户停止PlayMode时调用,在网页播放器(web player)中会在网页视图关闭时调用。
- OnDisable:当行为变为非启用(disable)或非激活(inactive)时调用。