3D游戏编程——期末考试

今天是2021年1月4号,进行了3D游戏的最后一次考试,说实话有惊无险……希望后续选这门课的同学考试前一定多温习一下,不要像我一样好几周前就把作业给做了结果一上手手生!起码考试前一天要打开Unity温习一下基本的操作,哪怕是创建一个物品,贴一贴图之类的。下面一起来回顾一下这一次惊险的考试历程。

第一题

题目描述

请在场景放置一个Plane和两个Cube,要求如下:

  • 两个Cube一大一小,小Cube是大Cube的0.4倍大小,相对于大Cube的位置为Vector3(2,0,0);
  • Cube的颜色为红色,小Cube的颜色为红色

解答

这一道题纯属热身题目,这里不再赘述,我们GameObject->3D Object,选择CubePlane,放到场景上即可。然后我们在Assets右键,Create->Material,设置上红色和黄色,然后拖到对应的方块上即可。

这一道题做完后的效果如下:

第二题

题目描述

为两个Cube添加运动,要求是:

  • Cube以速度20.0绕自身y轴旋转
  • Cube以速度25.5绕大Cube旋转

解答

为大Cube绑定如下代码:

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

public class RedCube : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.Rotate(new Vector3(0, 20.0f * Time.deltaTime,0));
    }
}

为小Cube绑定如下代码:

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

public class YellowCube : MonoBehaviour
{

    public Transform RedCube;
    // Start is called before the first frame update
    void Start()
    {
        RedCube.position = new Vector3(0,2,0);      //这里填写你的大红方块的位置
    }

    // Update is called once per frame
    void Update()
    {
        transform.RotateAround(RedCube.position, Vector3.up, 25.5f * Time.deltaTime);
    }
}

同时记得将你的大方块拖给其中的变量RedCube

拖好后运行效果如下

第三题

题目描述

创建一个按钮,按钮的显示文字为Rotate,点击这个按钮时,能够使得黄色方块停止绕红色方块公转,再次点击时能够重新让黄色方块开始公转。

解答

这一道题当然可以创建一个UIButton控件来解决,不过我们可以利用OnGUI来更快地解决这一道题目,这也是之前作业中让我们思考的两种方法的区别,显然现在是考试中,用OnGUI能更快地帮我们解题。我们重写黄色方块的代码:

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

public class YellowCube : MonoBehaviour
{
    public bool status;
    public Transform RedCube;
    // Start is called before the first frame update
    void Start()
    {
        status = false;
        RedCube.position = new Vector3(0,2,0);      //这里填写你的大红方块的位置
    }

    // Update is called once per frame
    void Update()
    {
        if (status) {
            transform.RotateAround(RedCube.position, Vector3.up, 25.5f * Time.deltaTime);
        }
    }

    void OnGUI() {
        if (GUI.Button(new Rect(500,300,100,50), "Rotate")) {
            status = !status;
        }
    }
}

代码逻辑很简单,就是用一个变量status来控制黄色方块的旋转,当按钮被点击的时候status取反即可。做好后效果如下:

第四题

题目描述

创建第二个摄像机拍摄场景的侧面,要求运行项目的时候这个摄像机呈现的画面出现在右下角。

解答

我们新创建一个摄像机,设置属性如下:

注意检查你的MainCameraDepth属性是不是-1哦!完后点击运行按钮,场景如下图所示:

本次考试到此结束,此时你可以举手让助教进行检查,然后潇洒地离开考场了。(不过本人并没有,因为在多摄像机最后这一道题上没有认真看课件博客卡了好久,的确如老师所说,有同学20分钟就做完了,我右边的朋友就是其中之一)。

总的来说考试的时候别慌,就和平时做作业一样,其实这次考试很快的,完全不用担心考试做不出来。

一学期的游戏课就这么结束啦!这一学期跟着老师和同学在课上做游戏,玩游戏,以及课上出现的种种游戏奇怪行为,例如天空喷球僵尸行走,也给我们带来了很多欢声笑语,最让人遗忘不了的还是老师上课的笑容!庆幸当初能来到软工,一起和大家上这一门游戏课,也算是不枉自己玩了这十几年的游戏带来的手感。这也是大三的第一场考试告一段落了,预祝我们剩下的考试依然顺利!

posted @ 2021-01-04 16:41  随心所欲丶蜻蜓卡兹克  阅读(229)  评论(0)    收藏  举报