(3d游戏第一次作业)井字棋及简答题

5 篇文章 0 订阅
4 篇文章 0 订阅

标签: 3d游戏编程 Unity3d 作业

第一次作业

简答题

1.

Q:解释游戏对象(GameObjects)和资源(Assets)的区别和联系
A:资源是储存在磁盘的文件,保存在Unity Project的Assets文件夹中。包括了各种原材料、3D模型、影像片段等等。
游戏对象是序列化数据的集合,是用于描述资源的实例。包括了mesh、sprite、AudioClip、AnimationClip等。

2.

Q:下载几个游戏实例,分别总结资源、对象组织的结构
A:资源依照用途组织,分为Content、Plugins等,还有按照类型组织。对象按照用途进行组织,执行相同操作的对象放在一起。

3.

Q:编写代码,使用debug语句来验证MonoBehaviour基本行为或事件触发的条件。

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

public class testScript : MonoBehaviour {
    int i=0;
    float time=0f;
    void Awake(){
        Debug.Log ("Awake!");
    }

    // Use this for initialization
    void Start () {
        Debug.Log ("Start!");
    }

    // Update is called once per frame
    void Update () 
    {/*
        i++;
        time = Time.deltaTime;
        Debug.Log ("这是第" + i + "帧");
        Debug.Log("时间为:" + time);*/
        Debug.Log ("Update!");
    }
    void FixedUpdate () 
    {/*
        i ++;
        time = Time.deltaTime;
        Debug.Log ("这是第" + i + "帧");
        Debug.Log("时间为:" + time);*/
        Debug.Log ("FixedUpdate");
    }
    void LateUpdate(){
        Debug.Log ("LateUpdate");
    }
    void OnGUI(){
        Debug.Log ("OnGUI");
    }
    void OnDisable(){
        Debug.Log ("OnDisable");
    }
    void OnEnable(){
        Debug.Log ("OnEnable");
    }
}

总结:
基本行为:
Awake MonoBehaviour创建后最先调用。
Start Start将在MonoBehavior创建后在该帧Update之前,在该Monobehavior.enabled == true的情况下执行。
Update 每帧需要更新的时候都会调用
FixedUpdate 每帧更新时调用,保证时间间隔一致。
LateUpdate 当Update调用结束时调用。
OnGUI 在需要处理和渲染时被调用。
OnEnable 当行为变为Enable时调用
OnDisable 当行为变为Disable时调用

4.

Q:查找脚本手册,了解GameObject、Transform、Component对象。

Q4.1 分别翻译官方对三个对象的描述

GameObject: Unity中的基本对象,用来表示特性、性质、风景。它们并没有实现多少功能,但作为组件的容器来。
Transform:
Transform用来储存物体的位置、角度、缩放比和父元素等信息,非常重要。一个GameObject总是会有一个Transform组件与其相关,不可分离。
Component:
与GameObjects相关的所有东西的基类。你的代码永远不会直接创建一个Component。与之相反,你写一段脚本代码,然后将这段代码与GameObject相关。

Q4.2

table对象是一个GameObject,第一个选择框是activeSelf属性,第二个是tag属性,第三个是layer属性;transform的第一个是position属性,第二个是rotation属性,第三个是localScale属性。具有Transform、Cube、BoxCollider、Mesh Renderer等部件。

Q4.3

丑陋的UML图

Q5

Q:整理相关学习资料,编写简单代码验证一下技术的实现:

Q5.1查找对象
void Update () 
{
    var a = GameObject.Find ("test");
    if (a != null) {
        Debug.Log ("Find test");
    }
}
Q5.2 添加子对象
void Start () {
    Debug.Log ("Start!");
    var test = GameObject.Find ("test");
    var a = new GameObject ("tt");
    a.transform.parent = test.transform;
}
Q5.3遍历对象树
void Start () {
    Debug.Log ("Start!");
    var test = GameObject.Find ("test");
    FindAllObjects (test);
}
void FindAllObjects(GameObject obj){  
    int i=0;  
    while(i<obj.transform.childCount){  
        Transform parent=obj.transform.GetChild(i);  
        print ("parent: "+obj.name+"child: "+i+" "+parent.name);  
        if(parent.childCount>0)  
            FindAllObjects(parent.gameObject);  
        i++;  
    }  
}  
Q5.4 清除所有子对象

void DeleteObject(GameObject obj)
{
for (int i = 0; i < obj.transform.childCount; i++) {
GameObject go = obj.transform.GetChild (i).gameObject;
Destroy (go);
}
}

Q6.资源预设与对象克隆

预设的好处:使用预设可以方便地创建出多个相同的对象。
克隆与预设的区别:两者都是为了快速复制出游戏对象存在的,区别是1.克隆游戏对象需要游戏场景中有游戏对象,但是预制的话允许场景中一开始不存在该对象。2.克隆出来的游戏对象不会随着克隆体的变化而发生变化,但是使用预制创建出来的对象会随着预制的改变而发生改变。

使用代码利用预设创建实例
void Start () {
    GameObject another = Instantiate (Resources.Load("table"),new Vector3(4,0,0),Quaternion.identity) as GameObject;
}

Q7.组合模式:将对象合成树形结构以表示“部分-整体”的层次结构。

子对象

public class child1 : MonoBehaviour {
    void ApplyDamage(int i){
        Debug.Log ("ApplyDamage for " + i);
    }
}

父对象

public class test : MonoBehaviour {
    void Update () {
        var test = GameObject.Find ("test");
        test.BroadcastMessage ("ApplyDamage", 5.0);
    }
}

井字棋

代码见https://github.com/wtysos11/wty_3dGameProgramming/tree/master/Week3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值