3d游戏编程与设计作业二

1、简答题

  • 解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系。
    游戏对象(GameObject)指的是一个能够容纳实现实际功能的组件。
    资源(Assets)指的是在游戏中可能用到的各种东西,比如模型、声音文件、贴图文件等等。
    联系在于游戏对象可以保存为资源,资源可以实例化为游戏对象。

  • 下载几个游戏案例,分别总结资源、对象组织的结构(指资源的目录组织结构与游戏对象树的层次结构)
    通过下载一个射击小游戏和一个赛车小游戏,总结发现
    资源的目录组织结构主要包括动画,文本,场景和一些使用说明等。
    游戏对象树的层次结构包括摄像机,开始位置,场景布局以及文本等。

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

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

public class NewBehaviourScript :
MonoBehaviour
{  
// Start is called before the first frame update   
void Start()
    {     
Debug.Log("start\n");
    }
   
// Update is called once per frame   
void Update()
    {       
Debug.Log("update\n");
    }
      
private void Awake()
    {       
Debug.Log("awake\n");
    }

   
private void FixedUpdate()
    {       
Debug.Log("fixedupdate\n");
    }
   
private void LateUpdate()
    {       
Debug.Log("lateupdate\n");
    }
   
private void OnGUI()
    {       
    Debug.Log("ongui\n");
    }
   
private void OnDisable()
    {       
Debug.Log("ondisable\n");

    }
   
private void OnEnable()

    {

       
Debug.Log("onenable\n");

    }

}

运行结果如下:
在这里插入图片描述

  • 查找脚本手册,了解 GameObject,Transform,Component 对象
    分别翻译官方对三个对象的描述(Description)
    GameObject是Unity场景里面所有实体的基类。但是它本身不能做任何事情,在它成为一个角色之前需要给他一个特征、环境或者特殊的影响。
    Transform被用来储存一个游戏对象的位置、旋转角度、大小。每个GameObject都会有一个Transform组件依附。
    Component是游戏中对象和行为的螺母和螺栓,是一切附加到游戏物体的基类。

    描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件
    在这里插入图片描述
    第一个选择框是activeSelf:可以定义对象的名称,动静态等属性
    第二个选择框是Transform:可以定义对象的位置、面向方向、大小
    第三个选择框是Box Collider:可以调整坐标系的位置、大小
    第四个选择框是Component:可以给对象增加行为

    用 UML 图描述 三者的关系(请使用 UMLet 14.1.1 stand-alone版本出图)
    在这里插入图片描述

  • 资源预设(Prefabs)与 对象克隆 (clone)
    预设(Prefabs)有什么好处?
    预设相当于一个对象的模板,预设的存在,方便了面向对象思想的应用,方便我们在设计游戏中更加便捷。预设使得修改的复杂度降低,一旦需要修改所有相同属性的对象,只需要修改预设即可,所有通过预设实例化的对象都会做出相应变化。

    预设与对象克隆 (clone or copy or Instantiate of Unity Object) 关系?
    克隆是将已经存在的游戏对象,或者是资源当中的预设进行复制。克隆可以是对已经添加在视图当中的游戏对象进行复制,也可以是对资源当中,我们提前预设好的模板进行克隆。所以,修改预设会使通过预设实例化的所有对象都做出相应变化,而对象克隆本体和克隆出的对象是不相影响的。

2、 编程实践,小游戏

  • 游戏内容: 井字棋 或 贷款计算器 或 简单计算器 等等

  • 技术限制: 仅允许使用 IMGUI 构建 UI

  • 作业目的:
    了解 OnGUI() 事件,提升 debug 能力
    提升阅读 API 文档能力

    井字棋小游戏演示视频

    关键代码解析
    主要通过OnGUI函数控制整个游戏过程

private void OnGUI()
    {

       GUI.skin.button.fontSize = 20;

        GUI.skin.label.fontSize = 20;

       if (GUI.Button(new Rect(300, 250, 150, 50), "Reset"))

       {

           num = 0;

           turn = 1 - turn;//轮流下第一个

           for (int i = 0; i < 3; i++)

           {

             for (int j = 0; j < 3; j++)

               {

                   map[i, j] = 0;

              }

          }

      }

	int win = getwin();

       if(win==1) GUI.Label(new Rect(350, 50, 100, 50), "O wins");

       else if(win==2) GUI.Label(new Rect(350, 50, 100, 50), "X wins");

       else if(win==3) GUI.Label(new Rect(350, 50, 100, 50), "Draw");

	for (int i=0;i<3;i++)

       {

          for(int j=0;j<3;j++)

           {

                if(map[i,j]==1)

                {

                    GUI.Button(new Rect(i * size + 300, j * size + 100, size, size), "O");

                }

                else if(map[i,j]==2)

                {

                    GUI.Button(new Rect(i * size + 300, j * size + 100, size, size), "X");

                }

                else if(GUI.Button(new Rect(i * size + 300, j * size + 100, size, size), ""))

                {

                    if (win == 0)

                    {

                        if (turn == 0)

                        {

                            map[i, j] = 1;

                        }

                        else map[i, j] = 2;

                        turn = 1 - turn;

                        num++;

                    }

                }

           }

       }

}

当每个玩家下完后都会判断接下来轮到谁下了,所选位置是否可以下,是否有人获胜,获胜或者平局应该出现相应的提示,还有就是通过点击reset重新开始游戏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值