3D游戏编程 homework 2

2024-01-24 21:40
文章标签 编程 3d 游戏 homework

本文主要是介绍3D游戏编程 homework 2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简答题

游戏对象运动的本质是什么?

在游戏中一个对象的运动都是相对于某一个坐标系的运动,实质上就是坐标的改变,通过坐标改变的速度以及方法实现各种运动。

请用三种方法以上方法,实现物体的抛物线运动

方法一:使用向量计算出每个时刻球应该在的位置,再把这个向量的坐标赋给球的位置,通过translate函数实现

public class move : MonoBehaviour
{private float vx = 5f, vy = 0f;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){Vector3 po = new Vector3(Time.deltaTime * vx, Time.deltaTime * vy, 0);this.transform.Translate(po);vy = vy - 10 * Time.deltaTime;}
}

方法二:对物体的position进行直接更改

public class move : MonoBehaviour
{private float vx = 5f, vy = 0f;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){Vector3 po = new Vector3(Time.deltaTime * vx, Time.deltaTime * vy, 0);this.transform.position += po;vy = vy - 10 * Time.deltaTime;}
}

方法三:使用vector3的差值函数实现

public class move : MonoBehaviour
{private float vx = 5f, vy = 0f;// Use this for initializationvoid Start(){}// Update is called once per framevoid Update(){Vector3 po = new Vector3(Time.deltaTime * vx, Time.deltaTime * vy, 0);transform.position = Vector3.Lerp(transform.position, transform.position + po, 1);vy -= 10 * Time.deltaTime;}
}
写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上

主要是用到了RotateAround函数来实现各个行星绕太阳的旋转。然后对于法平面的控制主要由Vector3向量来实现,而速度则是RotateAround的第三个参数。代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class move : MonoBehaviour
{// Use this for initializationvoid Start(){}// Update is called once per framevoid Update(){GameObject.Find("水星").transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0), 50 * Time.deltaTime);GameObject.Find("金星").transform.RotateAround(Vector3.zero, new Vector3(1, 1, 0), 55 * Time.deltaTime);GameObject.Find("地球").transform.RotateAround(Vector3.zero, new Vector3(2, 0, 0), 60 * Time.deltaTime);GameObject.Find("月亮").transform.RotateAround(GameObject.Find("地球").transform.position, Vector3.up, 300 * Time.deltaTime);GameObject.Find("火星").transform.RotateAround(Vector3.zero, new Vector3(1, 2, 0), 65 * Time.deltaTime);GameObject.Find("木星").transform.RotateAround(Vector3.zero, new Vector3(0.2f, 1, 0), 70 * Time.deltaTime);GameObject.Find("土星").transform.RotateAround(Vector3.zero, new Vector3(0.3f, 1, 0), 75 * Time.deltaTime);GameObject.Find("天王星").transform.RotateAround(Vector3.zero, new Vector3(0.4f, 1, 0), 85 * Time.deltaTime);GameObject.Find("海王星").transform.RotateAround(Vector3.zero, new Vector3(-0.7f, 1, 0), 80 * Time.deltaTime);}
}

搭建的模型如下:
在这里插入图片描述
运行过程截图如下:
在这里插入图片描述
在这里插入图片描述

编程实践

阅读以下游戏脚本

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!

程序需要满足的要求:

play the game ( http://www.flash-game.net/game/2535/priests-and-devils.html )
列出游戏中提及的事物(Objects)
用表格列出玩家动作表(规则表),注意,动作越少越好
请将游戏中对象做成预制
在 GenGameObjects 中创建 长方形、正方形、球 及其色彩代表游戏中的对象。
使用 C# 集合类型 有效组织对象
整个游戏仅 主摄像机 和 一个 Empty 对象, 其他对象必须代码动态生成!!! 。 整个游戏不许出现 Find 游戏对象, SendMessage 这类突破程序结构的 通讯耦合 语句。 违背本条准则,不给分
请使用课件架构图编程,不接受非 MVC 结构程序
注意细节,例如:船未靠岸,牧师与魔鬼上下船运动中,均不能接受用户事件!

  1. 游戏中的事物
    游戏中主要有牧师、魔鬼、小船、河岸、河水。

  2. 玩家动作表

动作条件
上岸船里有人,船在岸边
上船船上人数小于2,人和船在相同的岸边
下船船上有人,船在岸边
开船船上有人,船在岸边
成功牧师和魔鬼都在左岸
失败有至少一个牧师死亡
牧师被吃一边的岸上加船上(如果传靠岸)牧师数量小于魔鬼数量

为了使用MVC模型,所以需要将控制与图像物体区分开来编写主要采用了往届师兄的代码。
首先为了达到各个脚本文件之间的通信,所以使用到命名空间,这个命名空间放到Base.cs文件中,在这个文件中还定义了之后需要使用到的各种函数。主要的有Director导演,实例化唯一的一个导演来对游戏进行控制,还有对船的相关操作的定义控制,对系统需要响应的动作的控制,对岸边的控制,其中河岸与船实际上都可以使用实例化来解决。
然后是对view的控制,使用userGUI与clickGUI来分别定义用户的操作,(例如开始与重来)与点击事件(上船,下船,船过河)
详细的过程可以看代码的注释部分。
游戏运行过程如下
在这里插入图片描述
恶魔与牧师
运行视频

这篇关于3D游戏编程 homework 2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/641094

相关文章

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.