1 Star 17 Fork 3

SouthBegonia/UnityWorld

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

事件顺序

Version:2019.2b - Order of Execution for Event Functions

**首个场景加载时:**下列函数会在场景Scene开始时实行

  • Awake():在任何Start()之前,和在预制体prefab实例化instantiated后(若开时游戏对象GameObject未被激活inactive,则无法触发Awake),仅执行一次
  • OnEnable():仅当对象激活active时才触发执行,每激活一次就执行一次

编辑

  • Reset():当脚本首次挂载在对象上且点击了Reset脚本命令时触发,Reset()的触发会初始化脚本内的所有内容

在第1帧刷新前

  • Start(): 在第1帧率先你前触发Start()事件(前提脚本可执行),仅执行一次

刷新次序

  • FixedUpdate():它可以每帧调用多次,关键在于强制每帧执行次数,不受到机器性能或者框架的影响,所有的物理过程计算都发生在FixedUpdate()后
  • Update():每帧调用一次,是框架跟更新的主要函数
  • LateUpdate():LateUpdate()每帧调用一次,调用时间在Update()后,所有的物理过程计算都在LateUpdate()开始前就计算完毕;该函数的主要用法是第三人称视角,例如你可在Update()内执行角色的移动,在LateUpdate()内进行相机的移动、旋转

其他参考:Unity编程篇 MonoBehaviour 类

Time 类

  • Time.time:这一帧开始的时间,Update()内帧数不定,故该值非整数变化,可表示游戏进行的时间(较常用)
  • Time.fixedTime:最近FixedUpdate()开始的时间,由于FixedUpdate()每次执行间隔固定,故该值规律整数变化,表示从游戏开始到现在的时间
  • Time.realtimeSinceStartup:游戏启动到现在的时间,即便被暂停或者后台,也会持续计时,可用在计算某函数执行所用的时间 ( 类似C的 start=clock(),end=clock(),然后用时为(double)(end - start) / CLOCKS_PER_SEC) )
  • Time.deltaTime:时间增量,上一帧完成的用时,一般在1/60s左右波动
  • Time.fixedDeltaTime:固定的时间增量,为0.2s定值(Unity默认值,在Edit->Project Setting->Time里面查看)
  • Time.frameCount:游戏开始到现在执行了多少帧
  • Time.timeScale:调整时间的比例,用于游戏中的慢动作效果;当时间比例为1.0时,时间的流逝与实时一样快,当时间比例为0.5时,时间比实时慢2倍

GameObject 类

GameObject 是场景里所有实体的基类,但是在 GameObject类 中许多变量被移除,取而代之的是另一种访问方式:例如 GameObject.RendererGetComponent<Renderer>() 代替等。此外GameObject类 继承自 Object 类

基本属性

  • GameObject.activeSelf:表征此游戏对象自身的活动状态
  • GameObject.activeInHierarchy:表征游戏对象及其所有父物体和祖先物体或者子物体的activeself状态(较为常用在物体数量众多的情况)
  • GameObject.layer:游戏对象所在层次
  • GameObject.scene:游戏对象所在场景
  • GameObject.tag:游戏对象的标签属性
  • GameObject.Transform:游戏对象的基本坐标属性(所有对象必有)

创建游戏对象

  • Instantiate(T original, Vector3 position, Quaternion rotation):克隆T游戏对象original,返回克隆体,常用于实例化对象
  • GameObject.CreatePrimitive(PrimitiveType.type):创建一个带有原始网络渲染器Mesh Renderer 和对应碰撞器collider 的对象,type类型如Cube,Sphe,Plane,capsule等
  • AddComponent<>():给游戏对象添加各类组件或者脚本

销毁游戏物体或组件

  • Destroy(Object, float t):在延时ts后销毁游戏对象Object,也可以是其他组件或脚本,例如 Destroy(GetComponent<MoveScript>(),5f);

公用方法

  • GameObject.AddComponent(string className):将名为classname的组件类添加到游戏对象中
  • GameObject.CompareTag(string tag):判断游戏对象的标签是否为 tag
  • GameObject.GetComponent<T>():返回挂在在游戏物体上的 T 组件,这是访问组件的主要方式,也称为泛型方法(generic methods)
    • GameObject.GetComponentInChildren<T>():返回游戏对象或者其子物体上挂载的 T 组件(深度优先遍历,找到的对象必须为active状态)
    • GameObject.GetComponentInParent<>():返回游戏对象或者其父母物体上挂载的 T 组件(向上遍历,找到的对象必须为active状态)
  • GameObject.SetActive(bool value):根据接收的布尔值 激活/取消激活物体的active状态
  • GameObject.BroadcastMessage(string methodName):广播消息,在所有继承MonoBehaviour类脚本的游戏对象或者其子物体的脚本内(且必须为active状态),调用名为methodName的方法

静态方法

  • GameObject.CreatePrimitive(PrimitiveType.type):创建一个带有原始网络渲染器Mesh Renderer 和对应碰撞器collider 的游戏对象,type类型如Cube,Sphe,Plane,capsule等
  • GameObject.Find(string name):查找名字为name的游戏对象,若存在且对象状态为active 则返回该对象;若不存在则返回空值(耗费性能,不推荐)
  • GameObject.FindWithTag(string tag):查找、返回标签为tag的active对象,没有则返回空值(推荐方法)
  • GameObjectFindGameObjectsWithTag(string tag):查找返回标签为tag的所有游戏对象的列表

继承成员

由于GameObject继承自Object,故持有 Object 的一些方法:

  • 属性:
    • Object.name:对象的名称
  • 公用方法:
    • Object.ToString():返回对象的名称
    • Object.GetInstanceID():返回对象的实例标识符
  • 静态方法:
    • Object.Destroy(obj, t):立即销毁对象obj,或者在t秒之后销毁;销毁对象同一放置于垃圾池,待后续处理
    • Object.DestroyImmediate(obj, allowDestroyingAssets = false):立即销毁对象obj,用在编辑器代码内
    • Object.DontDestroyOnLoad(target):在加载新场景时阻止销毁target对象,因为每次加载新场景都会销毁所有旧场景的对象
    • Object.FindObjectOfType(Type type):搜索1个挂载有type类型组件的对象,并返回它(前提不被禁用)
    • Object.FindObjectsOfType(Type type):返回挂载有type类型组件的对象的列表
    • Object.Instantiate(Object original, Vector3 position, Quaternion rotation:实例化一个original的对象,初始坐标是position,初始旋转角度rotation;返回实例化对象的克隆体

延时机制

  • Invoke("Function", 5f):Unity的一种委托机制,可在 Start、Update、OnGUI、FixedUpdate、LateUpdate 中被调用,功能是在5s后调用Function()方法,常用于普通性延时
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C#
1
https://gitee.com/southbegonia/UnityWorld.git
git@gitee.com:southbegonia/UnityWorld.git
southbegonia
UnityWorld
UnityWorld
master

搜索帮助