Unity3D笔记(一)基础知识学习笔记

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

资源指的是游戏中那些直接可见的、对用户展现出的元素,包括图片、音乐、视频、人物、字体。
对象指的是数据?资源的载体?
资源可以被很多对象复用,很多资源构成游戏的场景。
资源的组织:首先按照大类分为音频、视频、字体、图片等,再往下可能是按照场景划分。对象的组织:可以按照玩家、环境、摄像机、音乐等进行分类,这些父类本身没有实体,只是一个逻辑的关系,他们的子类(可以理解为叶结点,构成游戏的主题)

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CamBeha : MonoBehaviour {
    void Awake() {
        Debug.Log ("onAwake");
    }
    void Start() {
        Debug.Log ("onStart");
    }
    void Update() {
        Debug.Log ("onUpdate");
    }
    void OnGUI() {
        Debug.Log ("onGUI");
    }
    void Reset() {
        Debug.Log ("onReset");
    }
    void onDisable() {
        Debug.Log ("onDisable");
    }
    void onDestroy() {
        Debug.Log ("onDestroy");
    }
}

Awake触发条件:实例正在载入的时候
Start触发条件:脚本可以被执行的第一帧,所有update没有执行之前
update触发条件:脚本可以被执行后,执行完start的每一帧
OnGUI触发条件:每次GUI被渲染的时候
Reset触发条件:在inspectors视图中被用户点击的时候
onDisable触发条件:当这个行为被disable的时候(虽然我不知道什么时候会被disable)
onDestroy触发条件:当这个对象销毁的时候(被Destory方法销毁)

三、通过官方参考手册,查找 GameObject,Transform,Component 对象,简单解释三者之间的关系。(使用UMLet 画教程上图)

GameObject是所有游戏对象的基类(base class),component对象是所有组件的基类(base class),这类对象都attack(不会翻译,只可意会)到gameobject上,transform是component的一个超类(继承自component),每个GameObject都有一个Component。
UML

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

查找对象

public static GameObject find(string name) // 根据对象名查找
public static GameObject FindWithTag(string tag) // 根据标签查找对象

添加对象

public static GameObject CreatePrimitive(PrimitiveType type);
public static Object Instantiate(Object original); // 通过克隆添加子对象

遍历对象树:
void travel(GameObject father) {
    foreach (Transform child in transform) {
         travel(child);
         // do something here
    }

}

清除所有子对象:
public static void Destroy(Object obj, float t = 0.0F);
void deleteAllChild() {
    foreach (Transform child in transform) {
        Destory(child); // 因为是object这个对象的方法,所有对象的基类     
    }
}

六、解释组合模式

组合模式类似于数据结构中的树的结构,有一个主对象,其他作为组件。在我的理解看来,他就是一种分级的模式。组合模式实现的关键就是简单和复合对象要实现相同接口,使用户能够像操作简单对象一样操作复合对象。
以下代码为向子对象cast消息示例:

public class CamBeha : MonoBehaviour {

    // Use this for initializationvoid Start () {

        this.BroadcastMessage ("sayHello"); 

    }

}

public class myBeh : MonoBehaviour {



void sayHello() {


Debug.Log ("hello world");


}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章