Unity3d学习笔记1——基础概念了解

时间:2021-03-17 04:08:52

Unity3d学习笔记1——基础概念了解

目录


解释对象与资源的区别与联系,根据官方案例,分别总结资源和对象组织的规则/规律

-资源 我的理解是指文件,存储在硬盘中。比如材质、贴图、纹理等等。可以实例化为对象,可以被对象使用。从资源到对象,要经过一个过程,如序列化与反序列化一般。
- 对象 我认为是指unity使用中的某些被加载进入内存的数据资源。不仅仅限于玩家,背景,等。
- 资源和对象的关系,并不一定是一一映射,所以会有使用一个资源创建多个对象,这样对于内存等会有一定减轻压力。

编写简单程序代码,逐一验证 MonoBehaviour 基本行为触发的条件

  • OnAwake 方法: 当脚本实例被载入时Awake被调用。
  • OnStart 方法: Start函数仅调用一次,而且是在Update函数第一次被调用之前调用。
  • OnUpdate 方法 :每一帧被调用一次。这里是大部分游戏行为代码被执行的地方,除了某些定时代码。
  • OnGUI 方法: 渲染和处理GUI相关事件时调用
  • FixedUpdate 方法: 这个函数在每个特定时间内会被调用一次。这是处理基于现实游戏行为的地方。
  • LateUpdate 方法 :是在所有Update函数调用后被调用。可以用来实现一些特殊的功能。可以理解为它在下一轮update执行前执行。
  • Reset 方法 : 重置为默认值
  • OnDisable 方法: 对象变为active false状态时此函数被调用。
  • OnDestroy 方法:当MonoBehaviour将被销毁时,这个函数将被调用
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

void Awake() {
Debug.Log("onAwake!");
}
void Start() {
Debug.Log("onStart!");
}
void Update() {
Debug.Log("onUpdate!");
}
void OnGUI() {
Debug.Log("onGUI!");
}
void FixedUpdate() {
Debug.Log("onFixedUpdate!");
}
void LateUpdate() {
Debug.Log("onLateUpdate!");
}
void Reset() {
Debug.Log("onReset!");
}
void OnDisable() {
Debug.Log("onDisable!");
}
void OnDestroy() {
Debug.Log("onDestroy!");
}
}

Unity3d学习笔记1——基础概念了解

通过官方参考手册,查找 GameObject,Transform,Component 对象,简单解释三者之间的关系。

  • GameObjects are the fundamental objects in Unity that represent characters, props and scenery. They do not accomplish much in themselves but they act as containers for Components, which implement the real functionality.
  • 根据官方文档的解释,GameObject就说最基本的对象,而很多特殊的功能其实是要靠挂载的Components组件来实现。
  • A GameObject contains components.
  • 组件是被GameObject包含的。
  • The Transform component determines the Position, Rotation, and Scale of each object in the scene. Every GameObject has a Transform.
  • Transform是一种组件,确定位置旋转缩放等,每个GamaObject都会有一个Transform组件。

整理官方和其他学习材料,介绍如何用程序(代码)管理一个场景的游戏对象树林。编写简单代码验证以下技术的实现:查找对象、添加子对象、遍历对象树、清除所有子对象

查找对象
通过名字查找:public static GameObject Find(string name)
通过标签查找单个对象:public static GameObject FindWithTag(string tag)
通过标签查找多个对象:public static GameObject[] FindGameObjectsWithTag(string tag)

添加子对象
public static GameObect CreatePrimitive(PrimitiveTypetype)

遍历对象树
foreach (Transform child in transform) {
Debug.Log(child.gameObject.name);
}

清除所有子对象
foreach (Transform child in transform) {
Destroy(child.gameObject);
}

预设有什么好处?与对象克隆 (clone or copy or Instantiate of Unity Object) 关系?

  • 预设体,可以节约资源,他是可以反复利用的游戏对象,可以应用于多个场景,亦或在一个场景中多次使用。预设的使用,就是很大程度上减少了重复的工作。
  • 对与对象克隆,预设体可以保证所有的实体,都是预设体的克隆,而且预设体的修改会改变所有实例。

解释组合模式。并编写验证程序,向组合对象中子对象 cast 消息, 验证组合模式的优点

  • 组合模式:组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。