【Unity3D游戏开发学习笔记】(五)灵魂降临—Unity脚本的简单运用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nizihabi/article/details/49359533

在Unity5.X版本中,支持的脚本有JavaScript,C#等,并且这些脚本可以同时存在和运用于同一个项目当中,两者没有绝对的排斥关系。

一、新建脚本

接下来,我们可以在编辑器当中新建一个脚本,在Project视图文件夹中右键,选择自己熟悉的脚本create即可,这里我们新建一个C#脚本。新建完了脚本之后,我们打开脚本看一下,可以发现脚本自动生成了两个函数:Start()Update()
在Unity里面,提供了一些函数供我们复写进行内部的调用,其中Start()是在脚本启用之后,Update执行之前调用,一般用于初始化变量等。Update()函数则是脚本每帧调用的时候都会执行,相当于是游戏的一个主逻辑线程,一般每帧对游戏的更新都在这个地方执行。除了这两个之外,还有其他的函数:

Update

 当MonoBehaviour启用时,其Update在每一帧被调用。

LateUpdate

当Behaviour启用时,其LateUpdate在每一帧被调用。

FixedUpdate

 当MonoBehaviour启用时,其 FixedUpdate 在每一帧被调用。

Awake

 当一个脚本实例被载入时Awake被调用。

Start

Start仅在Update函数第一次被调用前调用。

Reset

重置为默认值。

OnMouseEnter

当鼠标进入到GUIElement(GUI元素)或Collider(碰撞体)中时调用OnMouseEnter。

OnMouseOver

当鼠标悬浮在GUIElement(GUI元素)或Collider(碰撞体)上时调用 OnMouseOver .

OnMouseExit

当鼠标移出GUIElement(GUI元素)或Collider(碰撞体)上时调用OnMouseExit。

OnMouseDown

当鼠标在GUIElement(GUI元素)或Collider(碰撞体)上点击时调用OnMouseDown。

OnMouseUp

 当用户释放鼠标按钮时调用OnMouseUp。

OnMouseUpAsButton

OnMouseUpAsButton只有当鼠标在同一个GUIElement或Collider按下,在释放时调用。

OnMouseDrag

当用户鼠标拖拽GUIElement(GUI元素)或Collider(碰撞体)时调用 OnMouseDrag 。

OnTriggerEnter

当Collider(碰撞体)进入trigger(触发器)时调用OnTriggerEnter。

OnTriggerExit

当Collider(碰撞体)停止触发trigger(触发器)时调用OnTriggerExit。

OnTriggerStay

当碰撞体接触触发器时,OnTriggerStay将在每一帧被调用。

OnCollisionEnter

当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionEnter将被调用。

OnCollisionExit

当此collider/rigidbody停止触发另一个rigidbody/collider时,OnCollisionExit将被调用。

OnCollisionStay

当此collider/rigidbody触发另一个rigidbody/collider时,OnCollisionStay将会在每一帧被调用。

OnControllerColliderHit

在移动的时,当controller碰撞到collider时OnControllerColliderHit被调用。

OnJointBreak

当附在同一对象上的关节被断开时调用。

OnParticleCollision

当粒子碰到collider时被调用。

OnBecameVisible

当renderer(渲染器)在任何相机上可见时调用OnBecameVisible。

OnBecameInvisible

当renderer(渲染器)在任何相机上都不可见时调用OnBecameInvisible。

OnLevelWasLoaded

当一个新关卡被载入时此函数被调用。

OnEnable

当对象变为可用或激活状态时此函数被调用。

OnDisable

当对象变为不可用或非激活状态时此函数被调用。

OnDestroy

当MonoBehaviour将被销毁时,这个函数被调用。

OnPreCull

在相机消隐场景之前被调用。

OnPreRender

在相机渲染场景之前被调用。

OnPostRender

在相机完成场景渲染之后被调用。

OnRenderObject

在相机场景渲染完成后被调用。

OnWillRenderObject

如果对象可见每个相机都会调用它。

OnGUI

渲染和处理GUI事件时调用。

OnRenderImage

当完成所有渲染图片后被调用,用来渲染图片后期效果。

OnDrawGizmosSelected

如果你想在物体被选中时绘制gizmos,执行这个函数。

OnDrawGizmos

如果你想绘制可被点选的gizmos,执行这个函数。

OnApplicationPause

当玩家暂停时发送到所有的游戏物体。

OnApplicationFocus

当玩家获得或失去焦点时发送给所有游戏物体。

OnApplicationQuit

在应用退出之前发送给所有的游戏物体。

OnPlayerConnected

当一个新玩家成功连接时在服务器上被调用。

OnServerInitialized

当Network.InitializeServer被调用并完成时,在服务器上调用这个函数。

OnConnectedToServer

当你成功连接到服务器时,在客户端调用。

OnPlayerDisconnected

当一个玩家从服务器上断开时在服务器端调用。

OnDisconnectedFromServer

当失去连接或从服务器端断开时在客户端调用。

OnFailedToConnect

当一个连接因为某些原因失败时在客户端调用。

OnFailedToConnectToMasterServer

当报告事件来自主服务器时在客户端或服务器端调用。

OnMasterServerEvent

当报告事件来自主服务器时在客户端或服务器端调用。

OnNetworkInstantiate

当一个物体使用Network.Instantiate进行网络初始化时调用。

OnSerializeNetworkView

在一个网络视图脚本中,用于自定义变量同步。

其中,要注意的是以下几个常用的函数的执行顺序:
Awake()->OnEnable()->Start()->Update()->LateUpdate()->OnGUI()->OnDisable()->OnDestroy()
下面是我用相关的测试脚本得出来的执行结果:
这里写图片描述

AwakeStart比较容易混淆,我们看看Unity圣典当中的介绍好了:

Awake()

当一个脚本实例被载入时Awake被调用。

Awake用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如 GameObject.FindWithTag 这样的函数搜索它们。每个游戏物体上的Awke以随机的顺序被调用。因此,你应该用Awake来设置脚本间的引用,并用Start来传递信息。Awake总是在Start之前被调用。它不能用来执行协同程序。

Start()

Start仅在Update函数第一次被调用前调用。Start在behaviour的生命周期中只被调用一次。它和Awake的不同是Start只在脚本实例被启用时调用。
你可以按需调整延迟初始化代码。Awake总是在Start之前执行。这允许你协调初始化顺序。

二、脚本的使用

Unity是一个面向组件的一个游戏引擎,在Unity当中,脚本也算是一种组件,我们可以通过以下四种方式将建好的脚本和游戏的物体结合起来:

  1. 直接拖动到Hierarchy当中的Object节点
  2. 选定Object,在Inspector面板中点击AddComponent来添加
  3. 直接拖至Scene当中的Object
  4. 通过代码添加:this.gameObject.AddComponent<T>();

三、变量的声明

在Unity中,有一个很方便的功能,就是允许你在脚本当中定义一个变量,然后在编辑器运行当中可以实时改变变量的值,而不需要打开脚本编辑,通过这种模式,我们可以在游戏播放测试的时候设置合适的变量值。下面我们说一下定义变量需要注意的事项(C#脚本):

  • 必须定义成public对象
  • 结构体定义前需要加上序列化标签

我们来看看例子:

    [System.Serializable]
    public struct Boundary
    {
        public float xMin;
        public float xMax;
        public float zMin;
        public float zMax;
    }

    public Boundary bound;

在代码中,我声明了一个Boundary的结构体,并定义一个public的bound对象,然后我们把这个脚本拖到场景中的物体当中,此时,编辑器会进行更新,然后我们就会发现在Inspector界面里面,我们的脚本组件多了可以编辑的属性在内:

这里写图片描述

通过这种方式,我们可以提高脚本的复用性。

这一节就先学习到这,下一节我们将会学习如何通过脚本跟游戏的组件和Object进行进一步的交互

猜你喜欢

转载自blog.csdn.net/nizihabi/article/details/49359533
今日推荐