3d游戏设计 Homework1

Homework1


简答题

1、

Assets是一个可以存储声音素材、图像素材、场景、预置、脚本、动画素材等可以供游戏开发的资源库。
GameObject是在一个类型名,继承了Object类型,可供创建可以在游戏的对象的实例。
两者的区别是GameObject是在运行的时候实际存在的对象实例,而Assets是一个资源库,在游戏中不是实际存在的。
联系是GameObject的类型可以以预置(prefabs)的形式存在在资源库中,而且Assets的资源可以组装或添加到GameObject中,使GameObject更有行为性、外观或属性。

2、

同样都是树状结构,资源组织中具有声音素材、图像素材、场景、预置、脚本、动画素材等等分支文件。目的是为了放资源的管理(查找和搜寻)。而对象组织结构中的一个对象B可以是另外一个对象A的child,A是B的parent,他们之间是继承(inherit)关系,在逻辑上的理解是B是A的构成组件,A可以由多个child组成,但是B的实例只能有一个parentA实例。

3、

代码如下
1

实验结果如下

8

通过实验结果可以看到执行顺序是在构建对象实例初始化内容时后,Awake函数激活,激活后调用Start函数,UPdate()刷新频率是每秒50帧左右,FixedUpdate()可以固定刷新频率,更新频率可以通过给Time.fixedDeltaTime置位实现。

onGUI()实现如下


9

onGUI()测试函数如下



11



12

UnityGUI 控件使用一种称为 OnGUI() 的特殊函数。只要包含的脚本已启用,每帧OnGUI() 函数都会被调用 - 正如 Update() 函数。用GUI类中的显示函数只能在OnGUI()中使用。和Update的区别是OnGUI渲染和处理GUI事件时调用。Update当MonoBehaviour启用时,其Update在每一帧被调用。




在Unity3D的使用中,有时需要将一些模型停用,也就是停止渲染,这样可以达到提高性能的效果,有时也是为了场景需要。这个时候就要用到setActive,如果调用一次setActive = true就会调用一次Enable(),如果调用setActive一次Disable()。Enable()和Disable()目的是为了启用和禁用组件。通过资料搜寻我知道了一个GameObject有Activity和Enable属性,我们可以设置他来决定一个组件执行的顺序,如果Activity和Enable都是true,那么脚本实例调用顺序为Awake()、Enable()、Start()、FixedUpdate()、Update()、LateUpdate(),


6
如果Activity=true,Enable=false,那么只调用Awake()
如果Activity=false那么只调用Disable()

4、

GameObject:是unity场景中所有实体的基本类。
Transform:一个对象的位置、角度、规模,每一个场景中的对象可以有一个Transform,他用来存储和操纵位置,角度和物体的规模,每一个Transform都有一个可以让你分层应用位置,角度和规模的父类。
Component:所有绑在GameObjects上的基本类。注意你不能在代码中直接创建一个组件。你需要写脚本代码,然后把脚本绑在GameObject上座位替代。
table的属于GameObject的属性有activeInHierarchy,activeSelf,isStatic,layer,scence,tag,transform,Translate的属性有childCount、eulerAngles、forward、hasChanged、hierarchyCapacity、hierarchyCapacity、hierarchyCount、localEulerAngles、localPosition、localRotation、localScale、localToWorldMatrix、lossyScale、parent、position、right、root、rotation、up、worldToLocalMatrix

5、

GameObject GameObject Find(String name) //返回查找的对象名 
GameObject GameObject FindWithTag(string tag)  //通过标签查找单个对象
GameObject GameObject[] FindGameObjectsWithTag(string tag) //通过标签查找对象集合



GameObject CreatePrimitive(String name) //创建子对象



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



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




关系之间的UML图如下:
4
解释:
TransForm的只能有一个或没有parent作为自己的属性
一个parent可以有多个TransForm
GameObject和TransForm之间可以互相转化,互相引用
一个GameObject可以有一个到多个TranForm
一个GameObject可以有0个到多个组件,
GameObject可以通过序列化变成Prefabs

6、

预设使对象组合能够快速保存和提取。
克隆和预置的区别在于:

    1、克隆游戏对象需要场景中有被克隆对象,而创建预制只需事先创建预制即可,允许场景中一开始并不存在该游戏对象。

    2、克隆出来的游戏对象并不会随着被克隆体的变化而发生变化,但是使用预制创建出来的对象会随着预制的改变而发生改变。

通过预置创建GameObject
这里写图片描述

结果如下
这里写图片描述

7、

组合模式允许用户将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合。组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致处理的原因。

(简单的解释一下,为了同时处理简单对象和组合对象,在组合对象的子类中实现相同的接口,这样组合对象也能和简单对象一致处理,像是事件委托和反射的结合版)

    子类对象(my_obj1)方法:

    void sayHello() {

              print("Hello1!");

    }
    子类对象(my_obj2)方法:

    void sayHello() {

              print("Hello2!");

    }


    父类对象(GameObject)方法:

    void Start () {

              this.BroadcastMessage("sayHello");

    }

结构:

GameObject

|—-

my_obj1

|—-

my_obj2

运行结果:

Hello1!

Hello2!

传说中的龙书是也。。。 最好最新的DirectX游戏开发入门书籍 英文版+中文版+源代码 打包 非常适合初学者 内容提要 -------------------------------------------------------------------------------- 本书主要介绍如何使用DirectX 9.0开发交互式3D图形程序,重点是游戏开发。全书首先介绍了必要的数学工具,然后讲解了相关的3D概念。其他主题几乎涵盖了Direct3D中的所有基本运算,例如图元的绘制、光照、纹理、Alpha融合、模板,以及如何使用Direct3D实现游戏中所需的技术。介绍顶定点着色器和像素着色器的章节(包含了效果框架和新的高级着色语言的内容)对这些关键运算进行了较为集中的讨论。 本书内容深入浅出,内容广泛,可供从事3D游戏程序设计、可视化系统设计或其他图形应用程序开发的开发人员和大中专院校学生参考,也极适合各种游戏开发培训机构作为Direct3D编程的培训教程。 目录 -------------------------------------------------------------------------------- 第Ⅰ部分 基础知识 必备的数学知识\t 3D空间中的向量\t 矩阵\t\t 基本变换\t 平面(选读)\t 射线(选读)\t 小结\t\t 第Ⅱ部分 Direct3D基础 第1章 初始化Direct3D 1.1 Direct3D概述\t 1.2 COM(组件对象模型)\t 1.3 预备知识\t 1.4 Direct3D的初始化\t 1.5 例程:Direct3D的初始化 1.6 小结\t 第2章 绘制流水线\t 2.1 模型表示\t 2.2 虚拟摄像机 2.3 绘制流水线 2.4 小结\t 第3章 Direct3D中的绘制\t 3.1 顶点缓存与索引缓存 3.2 绘制状态\t 3.3 绘制的准备工作\t 3.4 使用顶点缓存和索引缓存进行绘制\t 3.5 D3DX几何体 3.6 例程:三角形、立方体、茶壶、D3DXCreate* 3.7 小结\t 第4章 颜色\t 4.1 颜色表示 4.2 顶点颜色 4.3 着色\t 4.4 例程:具有颜色的三角形\t 4.5 小结\t 第5章 光照\t 5.1 光照的组成\t 5.2 材质\t 5.3 顶点法线\t 5.4 光源\t 5.5 例程:光照 5.6 一些附加例程\t 5.7 小结\t 第6章 纹理映射 6.1 纹理坐标\t 6.2 创建并启用纹理\t 6.3 纹理过滤器 6.4 多级渐进纹理 6.5 寻址模式 6.6 例程:纹理四边形 6.7 小结\t 第7章 融合技术\t 7.1 融合方程\t 7.2 融合因子 7.3 透明度 7.4 用DirectX Texture Tool创建Alpha通道\t 7.5 例程:透明效果\t 7.6 小结\t 第8章 模板\t 8.1 模板缓存的使用\t 8.2 例程:镜面效果\t 8.3 例程:Planer Shadows\t 8.4 小结\t 第Ⅲ部分 Direct3D的应用 第9章 字体\t 第10章 网格(一)\t 第11章 网格(二)\t 第12章 设计一个灵活的Camera类 第13章 地形绘制基础\t 第14章 粒子系统\t 第15章 拾取\t 第Ⅳ部分 着色器和效果 第16章 高级着色语言(HLSL)入门\t 第17章 顶点着色器入门\t 第18章 像素着色器入门\t 第19章 效果框架\t 附录 Windows编程入门\t 参考文献 作者介绍 -------------------------------------------------------------------------------- Prank Luna是Hero lnteractive的程序员,从事交互式3D图形编程已有八年多。他最早接触DirectX可以追溯到DirectX5发布之时,目前居住在加州的洛杉矶市。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值