Unity3D作业一

这篇博客介绍了Unity3D中的游戏对象和资源的区别与联系,详细阐述了GameObject、Transform和Component的性质,并通过代码展示了如何查找对象、添加子对象、遍历对象树和清除子对象。此外,讨论了预设(Prefabs)的优势,以及它们与对象克隆的关系。最后,讲解了组合模式在Unity中的应用,并提供了井字棋的小游戏编程实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 简答题

  • 解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系。

游戏对象是资源的集合体,是资源整合的结果。

资源可以被一个或多个游戏对象使用,游戏对象也能被预设为资源,作为模板重复使用。

  • 下载几个游戏案例,分别总结资源、对象组织的结构(指资源的目录组织结构与游戏对象树的层次结构)

资源:动画、音效、图片、对象、新手指引、材质、场景、预设、脚本

对象:玩家、环境、对手、摄像机、音乐、灯光等虚拟父类。

  • 编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件
    • 基本行为包括 Awake() Start() Update() FixedUpdate() LateUpdate()
    • 常用事件包括 OnGUI() OnDisable() OnEnable()

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


public class TestBehavior : MonoBehaviour
{
     void Awake() {
        Debug.Log ("onAwake");
    }
    void Start () {
        Debug.Log ("onStart");
    }
    void Update () {
        Debug.Log ("onUpdate");
    }
    void FixedUpdate() {
        Debug.Log ("onFixedUpdate");
    }
    void LateUpdate() {
        Debug.Log ("onLateUpdate");
    }
    void OnGUI() {
        Debug.Log ("onGUI");
    }
    void OnDisable() {
        Debug.Log ("onDisable");
    }
    void OnEnable() {
        Debug.Log ("onEnable");
    }
}
  • 查找脚本手册,了解 GameObject,Transform,Component 对象
    • 分别翻译官方对三个对象的描述(Description)
    • 描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件
      • 本题目要求是把可视化图形编程界面与 Unity API 对应起来,当你在 Inspector 面板上每一个内容,应该知道对应 API。
      • 例如:table 的对象是 GameObject,第一个选择框是 activeSelf 属性。
    • 用 UML 图描述 三者的关系(请使用 UMLet 14.1.1 stand-alone版本出图)

1. GameObject(游戏对象):Unity场景中所有实体的基类,是Unity中的基本对象,代表角色,道具和场景。其本身无法完成许多功能,但它们充当部件容器以实现真正的功能。

    Transform(变换):确定场景中每一个对象的位置,旋转和缩放。每个游戏对象都有变换这一属性。

    Component(部件):是游戏中对象和行为的基本要素。它们是每个游戏对象的功能部件。

 2. table 对象(实体)的属性:activeSelf(第一个选择框)、isStatic(Static下拉栏左侧的选择框)、Layer、Tag、Transform

    table 的 Transform 的属性:Position、Rotation、Scale

    table 的部件:Mesh Filter、Box Collider、Mesh Renderer

3. 

  • 整理相关学习资料,编写简单代码验证以下技术的实现:
    • 查找对象
    • 添加子对象
    • 遍历对象树
    • 清除所有子对象

1. 查找对象:

//通过对象名称
//传入的name可以是单个的对象的名字,也可以是hierarchy中的一个路径名
public static GameObject Find (string name);

//通过标签获取单个游戏对象
public static GameObject FindWithTag (string tag);

//通过标签获取多个游戏对象
public static GameObject[] FindGameObjectsWithTag (string tag);

//通过类型获取单个游戏对象
public static Object FindObjectOfType(Type type);

//通过类型获取多个游戏对象
public static Object[] FindObjectsOfType(Type type); 

2. 添加子对象

public static GameObject CreatePrimitive(PrimitiveType type); 

 3. 遍历对象树

foreach(Transform child in transform) 
{  
     Debug.Log(child.gameObject.name);  
}  

4. 清除所有子对象

foreach(Transform child in transform)
{
    Destroy(child.gameObject);
}

 

  • 资源预设(Prefabs)与 对象克隆 (clone)
    • 预设(Prefabs)有什么好处?
    • 预设与对象克隆 (clone or copy or Instantiate of Unity Object) 关系?
    • 制作 table 预制,写一段代码将 table 预制资源实例化成游戏对象

1. 预设在被修改时可以保持所有副本同步,且能够提高使用资源的效率。

2. 修改预设时,预设的副本也会发生变化。修改克隆对象时,其副本是独立于被克隆的对象,不会发生变化。

3. 

public GameObject table; 

void Start () 
{
    GameObject instance = (GameObject)Instantiate(table, transform.position, transform.rotation);
}
    
void Update ()  {}
  • 尝试解释组合模式(Composite Pattern / 一种设计模式)。使用 BroadcastMessage() 方法
    • 向子对象发送消息

组合模式将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。它模糊了树型结构问题中简单元素和复杂元素的概念,客户程序可以跟处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

//父类对象方法
public class Father : MonoBehaviour 
{
    void test() 
    {
        Debug.Log("Printed by father.");
    }

    void Start () 
    {
        this.BroadcastMessage("test");
    }
}


//子类对象方法
public class Son : MonoBehaviour 
{
    void test() 
    {
        Debug.Log("Printed by son.");
    }
}

2. 编程实践,小游戏

井字棋

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值