unity相关的javascript脚本:unity圣典学习笔记————MonoBehaviour

MonoBehaviour是每个unity脚本的基类.每个Javascript脚本自动继承MonoBehaviour,使用C#或Boo时,需要显式继承MonoBehaviour.大部分预定义函数都可以在自己的脚本中重写(override)。

一.常见函数

(注:除函数外,脚本中还有许多函数外部的代码在物体被加载时运行,用来初始化脚本状态,即相当是一个只在脚本对应的物理对象被加载的时候调用的初始化函数)

1.预定义函数:

(预定义变量)useGUILayout:设定是否将会跳过GUILayout布局阶段。

(调用控制函数)该类函数是该脚本用来控制其他函数执行的函数,无需重写,在合适的地方调用,可以起到控制流程的作用。

Invoke (methodName : string, time : float):在time秒调用
methodName方法,在初始化代码中执行可以起到延时执行的效果。

InvokeRepeating (methodName : string, time : float, repeatRate : float) :在前者基础上增加了每隔repeatRate就重复调用一次。

CancelInvoke (methodName : string) :(可以不加参数):取消该脚本中所有methodName的调用(取消所有调用)

IsInvoking (methodName : string):判断methodName函数是否在被调用,被调用是指在等候调用,可能是延时调用,可以用来保证一个函数同时只被调用一次。(不加参数可以查看所有的函数是否被调用)

StartCoroutine (routine : IEnumerator)
StartCoroutine (methodName : string, value : object = null) :开始一个协程,可以使用返回值为IEnumerator的函数作为参数,也可以使用一个函数名(字符串)作为参数(注意只能是使用一个参数。。。不知道为什么这样设计),后者可以使用StopCoroutine 来随时终止协程。作为协程的函数都需要是返回值类型为IEnumerator(C#的迭代器),而在具体返回值使用yield return决定什么时候返回主程序,一般使WaitForSeconds()的实例作为返回值。
注:协程是一个在unity中作为协助主程序执行的一种辅助程序,包括两种形式,一种是上述Coroutine,这种形式中协程的执行不会影响主程序的进行,即主程序之后的代码会继续执行。另一种是yield的中断式协程,这种会等待协程执行完才执行主程序。一般使用前者去实现延时。

yield在C#中为yield return ,如yield return 1,等1帧; yield return WaitForSeconds(3.0); 等3秒。特殊的有yield return null,表示当前帧停止,下一帧从这里继续,在js中为 yield。使用yield return 的函数必须将返回值类型设计为IEnumerator,以供作为协程使用。而使用的凡是即为StartCoroutine(DoSomeThingInDelay());

StopCoroutine (methodName : string) :对应上面的以字符串的协程名的参数的协程开始函数,随时停止指定的协程。

StopAllCoroutines():停止所有的协程。

(可重写函数:基础部分)
Update():这个函数在运行一帧之前被调用,可以用Time.deltaTime获取自最后一次调用Update所用的时间。即虽然是以帧计算但也可以获得当前时间。

LateUpdate():LateUpdate是在所有Update函数调用后被调用,与Update结合可以设计脚本执行顺序。Time.deltaTime获得最后一次调用的时间

FixedUpdate:这个函数会在每个固定的物理时间步(该时间是固定的,所以也可以看做固定的一帧,在项目中设定)被调用一次。这是放置游戏基本物理行为代码的地方。对于物理属性的计算,需要以准确的时间增量来计算,所以不能以机器相关的帧来计算。Time.deltaTime获得最后一次调用的时间。

Awake ():Awake用于在游戏开始之前初始化变量或游戏状态。Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话。但是不同脚本的Awake的执行顺序不同,所以你应该用Awake来设置脚本间的引用,并用Start来传递信息,因为Awake总是在Start之前被调用。

Start () :Start只在脚本实例被启用时调用,而不是像Awake一样无论如何都会执行。

Reset () :当点击检视面板中的reset按钮时,会调用该函数给某些对象重置值。

(可重写函数:On监听函数)
1.鼠标事件
OnMouseEnter :当鼠标进入到GUIElement(GUI元素)或Collider(碰撞体)中时调用,这个函数不会在属于Ignore Raycast的层上调用.PhysicsRayCast是鼠标控制的基础。该函数可以作为协程,其内可以使用yield语句。
OnMouseOver:鼠标悬浮
OnMouseExit:鼠标离开
OnMouseDown:鼠标点击
OnMouseUp:鼠标释放
OnMouseUpAsButton:当且仅当在点击的同一个物体上鼠标释放
OnMouseDrag:鼠标按下之后的每一帧
2.触发器事件
Trigger:对于每一个碰撞体collider,都可以选择isTrigger,选择了之后就会成为一个触发器,另一个碰撞体collider与其发生接触之后,就会触发触发器事件,只要碰撞的两个物体之一是触发器,就会使得该碰撞不发生物理属性的碰撞,碰撞时互不影响得穿插过去。

OnTriggerEnter (other : Collider) :当Collider(碰撞体)进入trigger(触发器)时调用,参数为触发触发器的碰撞体

OnTriggerExit (other : Collider):离开触发器时调用
OnTriggerStay (other : Collider) :停留在触发器时的每一帧调用

3.碰撞事件
对于不是触发器事件的两个碰撞体(即IsTrigger为false),无论是否包含刚体,都会触发碰撞体事件,但是需要主动体是刚体。
OnCollisionEnter (collisionInfo : Collision) :碰撞发生时调用,传入的参数是一个Collision类,其中包含与碰撞的gameobject,collider,rigidbody,碰撞的物体的transform,两个碰撞物体的相对速度relativeVelocity,碰撞点集合contacts。
OnCollisionExit (collisionInfo : Collision) :碰撞停止时调用。
OnCollisionStay (collisionInfo : Collision):碰撞发生的期间每一帧都调用。

OnControllerColliderHit (hit : ControllerColliderHit) :处理控制碰撞器碰撞,用于角色和物体碰撞时调用,是一种特殊的碰撞。controller不需要是刚体。

4.其他事件
OnJointBreak (breakForce : float):物体之间会有许多joint关节连接方式,该函数在关节断开时被调用,参数是使用的力。具体关节的介绍会在unity组件手册阅读中记录。

OnParticleCollision (other : GameObject) :可以创建很多世界粒子(world particle)在空间中,该函数就可以用来处理当粒子碰撞到该物体时对该物体的处理,是在被碰撞的物体上调用。

OnBecameVisible () :当脚本所在物体的render在某一相机变为可见时调用。
OnBecameInvisible ():当脚本所在物体的render在所有相机(camera)都是不可见时调用。

OnEnable ():在脚本对象激活时调用,包括加载后和重新激活的情况。在awake()和start()之后。
OnDisable ():在脚本对象变为不可用时被调用,包括物体销毁和脚本变非激活状态的情况。
OnDestroy ():脚本对象被销毁时调用,在ondisable之后调用。

OnPreRender () :将脚本附加在相机上时,相机渲染场景之前调用。
OnPostRender () :将脚本附加在相机上时,在相机渲染完所有物体之后被调用。但是不考虑GUI渲染,如需考虑所有的物体和GUI渲染,则需要使用yield new WaitForEndOfFrame ();
OnRenderObject:在相机渲染完所有物体之后调用,与OnPostRender ()不同的是该函数无需附加在相机上。
OnWillRenderObject:当该物体可见时,任一相机要渲染之前都会调用,包括消隐过程, 即即使在视角内,但是会被其他物体挡住或者物体的一部分被挡住,称为消隐Camera.current为当前用于渲染的相机。
* OnGUI ()*:渲染和处理GUI事件时调用。同一帧也会有多次的GUI事件调用。

OnDrawGizmosSelected:在物体被选中时调用该函数绘制gizmos。gizmos是一个辅助线框类,包含一些绘制线或者线框的函数。绘制的gizmos不可被点选。
OnDrawGizmos:在每帧调用,所有在OnDrawGizmos中渲染的gizmos都是可见的。用来绘制可被点选的gizmos。

OnApplicationPause ():当程序暂停时调用。
OnApplicationFocus:当程序获得或失去焦点时调用,即焦点发生变化时调用。
OnApplicationQuit () :程序退出时调用。

OnPlayerConnected (player : NetworkPlayer) :当一个新玩家连接时调用(服务器调用)
OnServerInitialized ():当服务器初始化完成时调用(服务器调用)
OnConnectedToServer () :当用户连接到服务器之后调用(客户端调用)
OnPlayerDisconnected:用户退出服务器之后调用(服务器调用)
OnDisconnectedFromServer (mode : NetworkDisconnection):当断开连接时调用(客户端调用)
OnFailedToConnect (error : NetworkConnectionError):连接失败是调用,传入错误原因(客户端调用)
OnNetworkInstantiate (info : NetworkMessageInfo):当物体使用Network.Instantiate进行网络初始化时调用。(客户端)
OnMasterServerEvent (msEvent : MasterServerEvent) :当报告事件来自主服务器时在客户端或服务器端调用。
OnFailedToConnectToMasterServer (error : NetworkConnectionError):当连接主服务器出现问题时在客户端或服务器端调用.

2.继承函数
(实例函数)
GetComponent :根据给定类型得到组件对象。包括给定Type参数或者类型的字符串两种形式。
GetComponents (type : Type):根据给定类型得到游戏物体的所有组件对象

GetComponentInChildren (t : Type) :获取物体及其子物体的指定类型的组件,仅获取激活的组件。返回深度优先的第一个。
GetComponentsInChildren :返回全部。

CompareTag (tag : string) :比较物体或组件的标签与给定标签是否相同。

SendMessage (methodName : string, value : object = null, options
:SendMessageOptions = SendMessageOptions.RequireReceiver):向该游戏物体的所有脚本组件发送一个调用methodName函数的一个消息如果指定了options : SendMessageOptions =
SendMessageOptions.RequireReceiver,则会在没有脚本组件执行该方法时返回错误信息。
SendMessageUpwards :向该游戏物体以及上级父物体发送一个调用methodName函数的一个消息
BroadcastMessage向该游戏物体以及子物体发送一个调用methodName函数的一个消息。

GetInstanceID () :得到物体的实例ID,该ID是唯一的。
ToString:得到游戏物体的名称。

(类函数)
Destroy(obj: Object, t: float = 0.0F):可以删除gameobject以及组件等指定对象,包括脚本自身。可以指定一个延迟时间删除。
DontDestroyOnLoad (target : Object) :保持指定物体在加载新场景时不被销毁。
FindObjectOfType (type : Type) :搜索得到第一个指定类型的物体。
Instantiate (original : Object, position : Vector3, rotation : Quaternion):克隆一个指定物体,设置指定位置和角度。

二.继承变量

enabled:Behaviour是否被启用。Behaviour是继承自Component的类,特殊就在于包含enabled变量,即可以选择禁用。脚本对象就是一个Behaviour。

transform:当附加到一个GameObject时,指示其位置,旋转,缩放等变换信息的一个类Transform的一个实例。
* rigidbody*:附加到该GameObject上的一个Rigidbody的实例(如果存在的话)。Rigidbody是一个指示该GameObject刚体信息的一个类。
camera:Camera的一个实例,继承自Behaviour(可禁用),是玩家观察游戏及物体的一个视角。
light:附加在GameObject上的一个Light的实例。Light是继承自Behaviour(可禁用)的一个类,包含的就是光线的信息,一般是通过编辑器设置,也可以通过脚本设置。
animation:一个管理控制该GameObject的动画的类Animation的实例。继承自Behaviour。
constantForce:一个控制应用到GameObject上的恒力的物理工具类ConstantForce的实例,继承自Behaviour。与RIgidBody中的Force只作用一帧不同的是,该力的“恒”表现在作用于每一帧,除非做出改变或者禁用。
renderer:控制将该GameObject(任意物体,网格或粒子系统)渲染至的屏幕的渲染器类Renderer的实例。Renderer只要控制该GameObject展现的实际形态,包含enabled变量来控制是否被渲染的物体是否可见(但是Renderer继承自Component),也包含材质material,是否有投影等信息。
audio:控制GameObject发声的一个AudioSource类,继承自Behaviour。
guiText:与物体相关的界面文本类GUIText的实例,继承自GUIElement(继承自Behaviour).
collider:管理物体碰撞信息的碰撞器类Collider的实例,继承自Component。一般用于不经常移动的,无需考虑动力学形态的物体的,如果需要移动,最好再添加一个RigidBody控制形态。该类包含变量enabled控制是否启用碰撞,attachedRigidbody指示附加的刚体,isTrigger指示是否设置为Trigger(当刚体与之碰撞时,不在是碰撞,而是触发触发器时间),material设置碰撞器的材质,bounds设置碰撞器的边界值。
hingeJoint :HingeJoint的实例,是组合两个刚体的一种joint类型,就像用一个铰链连接他们一样约束其运动。该类包含JointMotor类型的动力变量motor来控制使链接绕着关节的轴旋转,一个JointLimits类型的变量limits约束关节角度,一个JointSpring类型的变量spring,设置了一个弹簧,它通过绕着铰链关节轴旋转试图达到一个目标角度,等等。继承自Joint(继承自Component)
particleEmitter :ParticleEmitter粒子发射器的实例,继承自Component,包含关于粒子发生的相关属性和函数。
gameObject :该脚本附加的游戏对象。
tag:游戏物体的标签,在标签管理器中设定。
name:游戏物体的名字,所有组件和游戏物体共享同一个名字。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值