Unity 3D学习之一Homework 1

基础概念

  1. GameObjects:

    游戏对象,即游戏中的最基本单位,游戏中的每一个对象都是游戏对象。它相当于一个容器,本身并无太多属性,需添加各种组件,资源后才能达到设计者的所希望的游戏行为目的。

    Assets:

    指可应用于Unity上的各种资源,为游戏添加各种属性,从而实现目标效果;同时,一个Unity Project的Assets文件夹指存储于本地计算机中的各种图片,预制,script等文件的总和。一个Assets中可以包含多个GameObjectGameObject从逻辑上讲存储于Assets文件夹中。

  2. 游戏结构目录:

    Assets

    • Scene 保存游戏场景
    • Game 保存美术资源
      • Materials 保存材质球,用于调整颜色等
      • Prefabs 保存预制,即游戏对象的模板,方便克隆
      • Model 模型
      • Animations 保存动画文件
      • Audio 音频文件
      • Textures 贴图文件
      • UI UI文件
      • Scripts 脚本文件
    • Plugins 插件
      • Editor 保存编辑器类文件
  3. MonoBehaviour 基本行为触发条件:

    代码如下:

    // Use this for initialization
    void Start () {
       Debug.Log("init Start");
    }
    // Update is called once per frame
    void Update () {
       Debug.Log("init Update");
    }
    void Awake()
    {
       Debug.Log("init Awake");
    }
    void FixedUpdate()
    {
       Debug.Log("init FixedUpdate");
    }
    void LateUpdate()
    {
       Debug.Log("init LateUpdate");
    }
    void OnGUI()
    {
       Debug.Log("init OnGUI");
    }
    void OnDisable()
    {
       Debug.Log("init OnDisable");
    }
    void OnEnable()
    {
       Debug.Log("init OnEnable");
    }

    Start:

    Unity 3D学习之一Homework 1_第1张图片

    Per frame:

    Unity 3D学习之一Homework 1_第2张图片

    End:

    Unity 3D学习之一Homework 1_第3张图片

    结论:

    • Awake(): 当脚本实例被载入时调用;
    • Start(): 在Update()前被调用一次;
    • Update(): 行为启用时,每一帧被调用一次;
    • FixedUpdate(): 行为启用时,每一时间片被调用;
    • LateUpdate(): 行为启用时,Update()之后被调用;
    • OnGUI(): 每帧调用多次,响应GUI事件;
    • OnEnable(): 当对象变为启用并激活时,调用该函数;
    • OnDisable(): 当对象变为禁用或不活动时,调用该函数。
  4. 简单介绍GameObject, Transform 和 Component,并画出三者的UML图。
    • GameObject: Unity 场景中所有实体的基类。
    • Transform: 一个对象的位置,旋转和大小。
    • Component: 所有附加到游戏对象的属性的基类。

    • UML

      Unity 3D学习之一Homework 1_第4张图片

  5. 简单代码
    • 查找对象

      新建项目,其中有 Sphere 游戏对象,代码如下:

      void Start()
       {
           Debug.Log("init start");
       }
      
       void FixedUpdate()
       {
           var x = GameObject.Find("Sphere");
           if (x.name != null)
           {
               Debug.Log("find the gameobject");
           }
           else
           {
               Debug.Log("Not found");
           }
       }
    • 添加子对象

      代码如下:

      void Start()
      {
       GameObject sph = GameObject.Find("Sphere");
       GameObject child = GameObject.CreatePrimitive(PrimitiveType.Cube);
       child.transform.parent = sph.transform;
       Debug.Log("Success");
      }
    • 遍历对象树

      代码如下:

       GameObject obj = GameObject.Find("Sphere");
       print("父对象名称为:" + obj.name + " 有" + obj.transform.childCount + "个子对象");
       int i = 0;
       while (i < obj.transform.childCount)
       {
           Transform child = obj.transform.GetChild(i);
           print("这是第: " + i + " 个子对象, 名称为: " + child.name);
           i++;
       }
    • 清除所有子对象

      代码如下:

       GameObject obj = GameObject.Find("Sphere");
       print("父对象名称为:" + obj.name + " 有" + obj.transform.childCount + "个子对象");
       int i = 0;
       while (i < obj.transform.childCount)
       {
           Transform child = obj.transform.GetChild(i);
           print("这是第: " + i+1 + " 个子对象, 名称为: " + child.name);
           GameObject pchild = GameObject.Find(child.name);
           GameObject.Destroy(pchild);
           i++;
       }
  6. 预设与对象克隆
    • Prefabs:

      预制可以存储一个带有组件和属性的 GameObject 作为模板,当想创建新的实例时,可以直接拖动模板进行创建。对预制做的修改可以应用到由该模板生成的所有实例中,也可以单独编辑每一个实例。

    • 总的来说,预设和对象克隆都能生成新的对象实例,但相比较而言,由 clone 生成的实例,编辑原对象时,就不能应用到所有实例中。

    • 预制 table :

      public GameObject prefab;
      void Start()
      {
       Instantiate(prefab, new Vector3(2.0F, 0, 0), Quaternion.identity);
      }
  7. 组合模式
    • 组合模式:

      定义:

      组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对组合对象和单个对象的使用具有一致性。

      包含三个部分:抽象构件,叶子构件和容器构件。

      目的即是使得对根节点的调用方法对叶子节点同样适用,使得工作效率更高。

    • 代码

      ​ 有三种发送消息的函数,其中BroadcastMessage()由父类发送给子类,括号里面:第一个参数为回应的函数,第二个参数为传递给回应函数的参数。

      void Start () {
       gameObject.BroadcastMessage("MySon","I am your father");
      }
      void MySon(string ss)
      {
       Debug.Log("I am your son");
      }

你可能感兴趣的:(3D-Game)