3D 游戏编程与设计:第3次作业

姓名:韩宝欣 学号:20331013

代码仓库:https://gitee.com/sse_20331013/3d-game.git

文章目录

  • 3D 游戏编程与设计:第3次作业
    • 1、简答并用程序验证【建议做】
      • 游戏对象运动的本质是什么?
      • 请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…)
      • 写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面。
    • 2、编程实践
      • 阅读以下游戏脚本
      • 代码要求
      • 游戏实现
        • 游戏中提及的事物
        • 玩家动作表(规则表)
        • MVC 架构

1、简答并用程序验证【建议做】

- 第二种方法,使用transform中的translate方法改变对象的位置。代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class parabola : MonoBehaviour {public float speed1 = 4;public float speed2 = 0;public float speed = 3;// Use this for initializationvoid Start () {Debug.Log("Init start");}// Update is called once per framevoid Update () {if(speed1 >= 0){speed1 = speed1 - 10 * Time.deltaTime;transform.Translate(Vector3.up * Time.deltaTime * speed1 / 2, Space.World);}//此处为实现物体先上抛在竖直方向上位置的变化。else{speed2 = speed2 + 10 * Time.deltaTime;transform.Translate(Vector3.down * Time.deltaTime * speed2 / 2, Space.World);}//此处为实现物体竖直方向速度减为0后//平抛运动在竖直方向上位置的变化。transform.Translate(Vector3.left * Time.deltaTime * speed);//此处为物体在水平上位置的变化。}
}
  • 第三种方法,新建一个vector3对象,改变这个对象的值,然后直接赋给物体。代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class parabola : MonoBehaviour {public float speed1 = 4;public float speed2 = 0;public float speed = 3;// Use this for initializationvoid Start () {Debug.Log("Init start");}// Update is called once per framevoid Update () {if(speed1 >= 0){speed1 = speed1 - 10 * Time.deltaTime;Vector3 newOne = new Vector3(Time.deltaTime * speed, Time.deltaTime * speed1 / 2, 0);this.transform.position += newOne;}//此处为实现物体先上抛在竖直方向上位置的变化。else{speed2 = speed2 + 10 * Time.deltaTime;Vector3 newOne = new Vector3(Time.deltaTime * speed, -Time.deltaTime * speed2 / 2, 0);this.transform.position += newOne;}//此处为实现物体竖直方向速度减为0后//平抛运动在竖直方向上位置的变化。}
}

写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面。

  • 代码:3d-game/作业三/太阳系
  • 运行截图

介绍框架和核心代码,源代码放在gitee上(省略了月球)

  • 首先,在游戏Scene中设置太阳、水星、金星、地球、火星、木星、土星、天王星和海王星。将图片放置在球体上,如下:

  • 设置各个行星的公转与自转速度,以及各自的法平面。

    • 运动中心参考物体:太阳;
    • Vector3变量axis:由两个float型的随机数组成:rx与ry,作为各行星运动的轴,代表行星运动的法平面;
    • 设置除了Sun外所有行星的中心体为Sun:

      • 将脚本 plantMove.cs 挂载到各个行星上,核心代码如下:

        void Update()
        {
        GameObject.Find(“Sun”).transform.Rotate(Vector3.up * Time.deltaTime * 5 );
        GameObject.Find(“Mercury”).transform.RotateAround(Vector3.zero, new Vector3(0.1f, 1, 0), 60 * Time.deltaTime);
        GameObject.Find(“Mercury”).transform.Rotate(Vector3.up * Time.deltaTime * 1 / 58);

          GameObject.Find("Venus").transform.RotateAround(Vector3.zero, new Vector3(0, 1, -0.1f), 55 * Time.deltaTime);GameObject.Find("Venus").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 243);GameObject.Find("Earth").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0), 50 * Time.deltaTime);GameObject.Find("Earth").transform.Rotate(Vector3.up * Time.deltaTime * 10);GameObject.Find("Mars").transform.RotateAround(Vector3.zero, new Vector3(0.2f, 1, 0), 45 * Time.deltaTime);GameObject.Find("Mars").transform.Rotate(Vector3.up * Time.deltaTime * 10);GameObject.Find("Jupiter").transform.RotateAround(Vector3.zero, new Vector3(-0.1f, 2, 0), 35 * Time.deltaTime);GameObject.Find("Jupiter").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 0.3f);GameObject.Find("Saturn").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0.2f), 20 * Time.deltaTime);GameObject.Find("Saturn").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 0.4f);GameObject.Find("Uranus").transform.RotateAround(Vector3.zero, new Vector3(0, 2, 0.1f), 15 * Time.deltaTime);GameObject.Find("Uranus").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 0.6f);GameObject.Find("Neptune").transform.RotateAround(Vector3.zero, new Vector3(-0.1f, 1, -0.1f), 10 * Time.deltaTime);GameObject.Find("Neptune").transform.Rotate(Vector3.up * Time.deltaTime * 10 / 0.7f);    }
        

2、编程实践

  • 阅读以下游戏脚本

Priests and Devils

Priests and Devils is a puzzle game in which you will help the Priests and Devils to cross the river within the time limit. There are 3 priests and 3 devils at one side of the river. They all want to get to the other side of this river, but there is only one boat and this boat can only carry two persons each time. And there must be one person steering the boat from one side to the other side. In the flash game, you can click on them to move them and click the go button to move the boat to the other direction. If the priests are out numbered by the devils on either side of the river, they get killed and the game is over. You can try it in many > ways. Keep all priests alive! Good luck!

  • 代码要求

    • 游戏效果:http://www.flash-game.net/game/2535/priests-and-devils.html
    • 请将游戏中对象做成预制 (Prefab)
    • 在场景控制器 LoadResources 方法中加载并初始化长方形、正方形、球及其色彩代表游戏中的对象
    • 使用 C# 集合类型 有效组织对象
    • 整个游戏仅主摄像机 和一个 Empty 对象, 其他对象必须代码动态生成!!!整个游戏不许出现Find 游戏对象, SendMessage 这类突破程序结构的通讯耦合语句
    • 请使用课件架构图编程,不接受非 MVC 结构程序
    • 注意细节,例如:船未靠岸,牧师与魔鬼上下船运动中,均不能接受用户事件

游戏实现

只介绍框架,源代码放在gitee上

  • 代码:3d-game/作业三/牧师和恶魔

  • 运行视频

  • 游戏获胜截图:

  • 游戏中提及的事物
    • Priest
    • Devil
    • Boat
    • Other environmental objects —— WaterRiverbank
  • 玩家动作表(规则表)
    动作 参数 结果
    启动游戏 切换至初始界面
    开始游戏(初始界面) 切换至游戏界面
    重新开始(游戏界面 重新加载游戏界面资源
    点击对象(游戏界面) 对象 对象根据当前位置移动
    返回(游戏界面) 初始界面
  • MVC 架构

  • M (Model):代表游戏中所有的游戏对象,它们受各自的Controller控制。Model是游戏中存在的实体。

  • V (View):代表游戏呈现出的界面。主要包括GUI和Click两部分,GUI负责展示游戏结果,Click负责处理用户点击事件。

  • C (Controller):代表游戏中的控制器,分为FitstController(场景控制器)和SSDirector(导演)。由于本游戏只有一个场景,所以导演只用负责退出和暂停;场景控制器需要控制场景中的所有物体。

  • 本游戏中,一共创建7个C#脚本来支持MVC架构。

  1. 游戏对象内部逻辑的实现(ModelController.cs):
  • 陆地 (LandModel)
    • 变量landSign:区分出发点和目的地;
    • Vector3数组:存储角色的位置,共6个位置;
    • RoleMode数组:存储角色的信息,共6个角色;
    • 成员函数:更改成员变量,实现角色的上船和上岸动作。
  • 船(BoatModel)
    • Move对象和Click对象:被点击和移动;
    • 变量boatSign:记录移动方向;
    • Vector3数组startPos和endPos:保存角色的位置;
    • RoleModel数组roles:保存角色的信息;
    • 成员函数:移动和支持角色上船以及上岸动作。
  • 角色/牧师和魔鬼(RoleMode)
    • 变量roleSign,onBoat,landSign:标记身份,是否在船上,在哪块陆地上;
    • Move和Click:角色的移动和被点击事件处理;
    • 其他成员函数:例如状态设置set,移动move等。
  1. 控制类的实现
    (SSDirect.cs/Interfaces.cs/FirstController.cs/MoveController.cs/ClickController.cs):
  • SSDirect.cs 使用单例模式,掌控全局;

    • 写一个单例模式即可。
  • FirstController.cs 用于控制场景Scene;

    • 其中具有之前的模型;
      也要包含Interface中所有的成员函数
  • Interfaces.cs 给FirstController.cs提供接口的,规范FirstController.cs的内容;

    • ISceneController提供场景接口;
    • IUserAction提供用户动作接口。
  • MoveController.cs 是用来控制物体的移动功能;

  • ClickController.cs 是用来控制物体被点击的动作。

  1. GUI 类
  • 实现UserGUI.cs:
    主要绘制文本框和按钮即可,游戏对象不通过GUI展现。
    变量sign:标记游戏的胜负;
    按钮 restart :实现重新开始;
    文本框 gametext :公布游戏结果。

参考:
Assets中其他的部分是直接copy师兄师的

3D 游戏编程与设计:第3次作业相关推荐

  1. 3D游戏编程与设计-井字棋

    3D游戏编程与设计-井字棋 目录 3D游戏编程与设计-井字棋 A. 简答题 1. 解释游戏对象(GameObjects)和资源(Assets)的区别与联系 ① 游戏对象 ② 资源 2. 下载几个游戏案 ...

  2. 3D游戏编程与设计作业10

    3D游戏编程与设计作业10 环境说明 Unity3D 导航与寻路 Agent 和 Navmesh 练习 Obstacle和Off-Mesh-Link练习 P&D 过河游戏智能帮助实现 状态图 ...

  3. 3D游戏编程与设计——游戏的本质章节作业与练习

    3D游戏编程与设计--游戏的本质章节作业与练习 18342138 郑卓民 3D游戏编程与设计--游戏的本质章节作业与练习 作业与练习: 游戏名称及简介: 游戏的随机性 游戏的玩法与目标 游戏的冲突 游 ...

  4. 3D游戏编程与设计 PD(牧师与恶魔)过河游戏智能帮助实现

    3D游戏编程与设计 P&D(牧师与恶魔) 过河游戏智能帮助实现 文章目录 3D游戏编程与设计 P&D(牧师与恶魔) 过河游戏智能帮助实现 一.作业与练习 二.设计简述 1. 状态图基础 ...

  5. 【3D游戏编程与设计】一 游戏的分类与热点

    [3D游戏编程与设计]一 游戏的分类与热点 游戏分类与热点探索 使用思维导图描述游戏的分类.(游戏分类方法特别多) 按游戏设备划分 按游戏参与者类型划分 按网络使用情况划分 按视角维度划分 按人称视角 ...

  6. 【3D游戏编程与设计】四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版

    [3D游戏编程与设计]四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版 基本操作演练 下载 Fantasy Skybox FREE, 构建自己的游戏场景 下载 Fantasy Skyb ...

  7. 3D游戏编程与设计作业09

    3D游戏编程与设计作业09 UGUI基础 画布 基础概念 测试渲染模式 UI布局基础 基本概念 锚点练习 UI组件与元素 基本概念 Mask练习 动画练习 富文本测试 简单血条 血条(Health B ...

  8. 3D游戏编程与设计 HW 4.5 牧师与恶魔(动作分离版)

    3D游戏编程与设计 HW 4.5 牧师与恶魔(动作分离版) 文章目录 3D游戏编程与设计 HW 4.5 牧师与恶魔(动作分离版) 1.作业要求 2.游戏制作 ① 设计思路 ② 设计代码 一.Actio ...

  9. 3D游戏编程与设计作业4-Skybox_牧师与魔鬼进阶版

    基本操作演练 下载Fantasy Skybbox FREE,构建自己的游戏场景 直接在上一次作业的Priests and Devils游戏场景中添加天空盒和地形构建场景.首先在Unity Assets ...

最新文章

  1. VTK:可视化之AssignCellColorsFromLUT
  2. Dockerd docker-containerd docker-containerd-shim runC
  3. Java入门到精通——基础篇之static关键字
  4. 【新功能】媒体处理MPS全新支持自适应多码率、多语言音轨
  5. Ubuntu16.04安装
  6. c++绘制函数图像_简洁优雅的Matplotlib可视化 | 绘制论文曲线图
  7. 最少拦截系统 贪心
  8. 如何在Ubuntu-16.04 / 18.04上为 RTX 2080 Ti GPU 安装Nvidia驱动和cuda-10.0
  9. 广告学计算机平面设计(1)形考5,(更新版)国家开放大学电大专科《计算机平面设计(2)》网络课形考任务1-5答案.doc...
  10. 软件测试项目实战,适合大家练习的实战项目有。
  11. 广东将5G基站专项规划纳入各地国土空间规划
  12. 大学毕业4年-回顾和总结(3)-投资理财观-图穷而真相现
  13. 推荐4个好用、接收邮件及时的临时邮箱
  14. 解决win10右键桌面出现闪屏问题
  15. 车辆工程(1)——线性二自由度汽车模型的运动方程
  16. Mob免费短信验证初探
  17. 隐藏进程占用cpu高
  18. 2、phpstudy本地搭建网站
  19. 仿淘宝上拉进入详情页交互的实现
  20. (Mimics、ANSYS)医学三维重建

热门文章

  1. 学习笔记-公有云安全
  2. Intel, AMD及VIA CPU的微架构(39,完)
  3. 你真的了解浮点型吗?float double浮点型深度解刨
  4. VSCode中i18n ally插件无效的几个原因
  5. python可以爬什么山_Python爬取13个旅游城市,告诉你五一大家最爱去哪玩?
  6. 外包人员:互联网公司【二等公民】...
  7. 沈阳城市学院计算机,沈阳城市学院通识教育学院在计算机设计大赛中获奖
  8. 一直以来电脑只是在不断模拟人类的潜意识部分 - 思维部分就是电脑实现人工智能的目标
  9. 美华医疗:夫唯不争,善利万物,好口碑保障私立医疗品牌高速发展
  10. 奶牛易物小组 Alpha冲刺