1、游戏背景

《黄金矿工小游戏》是一款敏捷,经典小游戏。怀揣梦想的黄金矿工为了寻找更多金子开始了他的挖金之旅。

游戏目标

使用钩子放入地下,开拓你的智慧寻找宝物,达到目标金额过关吧!

2、开发工具的基本使用

本游戏开发工具选择Unity3D(2020.3.30f),开发语言选择C#

3、2D游戏,准备工作及制作思路

在2D游戏的制作中,我们考虑更多的是游戏的长宽页面,深度无法直接看出,首先需要调整摄像机模式,选择Main Camera 在Inspector中的Projection选为Orthographic。

此时注意到我们的摄像机的射线变成了一个长方体。

注:没有近大远小的特点。

摄像机的渲染顺序由近到远,我们使用UI结合精灵的方式来制作游戏,将游戏分为三层:

背景层——游戏层——UI层

背景层和UI层使用UI搭建,游戏层使用精灵渲染器搭建。

4、背景层搭建

Canvas有三种渲染方式

Overlay方式:Screen Space-Overlay(屏幕控件-覆盖模式)的画布会填满整个屏幕空间,并将画布下面的所有的UI元素置于屏幕的最上层,或者说画布的画面永远“覆盖”其他普通的3D画面,如果屏幕尺寸被改变,画布将自动改变尺寸来匹配屏

Camera方式;在该模式下,画布会被放置到摄影机前方。在这种渲染模式下,画布看起来 绘制在一个与摄影机固定距离的平面上。所有的UI元素都由该摄影机渲染,因此摄影机的设置会影响到UI画面。

WorldSpace方式:即世界控件模式。在此模式下,画布被视为与场景中其他普通游戏对象性质相同的类似于一张面片(Plane)的游戏物体。画布的尺寸可以通过RectTransform设置,所有的UI元素可能位于普通3D物体的前面或者后面显示。

我们制作背景层的时候选择Camera方式。

Render Camera 选择Main Camera

Camera 与Plane 之间选择一个合适距离即可

为BGCarnvas添加一个Image 选择 填充整个页面

Source Image 选择添加我们提前收集到的素材

完成效果如下:

5、UI层搭建

UI层我们同样先新建一个Canvas,UI控件我们一般置于最上层,因此摄像机的一般的渲染方式选择Overlay,但是咱们本次UI内容比较简单,Time,Gold,Target三个文本,为了便于显示操作,我们使用Camera方式,将和摄像机的距离调整小于背景层与摄像机距离即可。

创建UItex,为time,gold,target创建UI文本。

6、游戏层的开发

1、普通物品的创建

首先创建GameManage图层作为游戏管理层,游戏层离摄像机的距离设置在UI层及背景层的中间。

在GameManage层中添加一个空物体名称为Icons方便我们管理游戏场景中的物体,在Icons下创建多个Sprite Rendere,导入我们的素材。在Unity的机制中,当我们选择了大于2个物体的时候,会优先考虑做成帧动画。因此可以创建出闪耀的物体。此时我们创建big_Gold、middle_Gold、small_Gold、diamond、mouse、rock作为我们的素材此时勾选好Animator(动画)将我们做好的动画状态机导入,可以用Crtl+d复制并在场景中移动到合适的位置。

2、绳子和抓钩的创建

在Gamemanage层中再创建一个sprite Renderer,命名为Rope,导入我们的绳子素材,移动到合适的位置。为Rope添加子物体作为抓钩。

不难发现,绳子的左右摆动可以通过改变Transform中的Rotation Z的值实现,绳子的缩放可以通过改变Transform中Scale Y 的值来实现。我们需要绳子的长度能够在斜对角的方向延展到最长。

绳子的状态应该有三种,摇摆,延长,收缩。

初始开始的时候绳子处于摇摆的状态,当鼠标点击屏幕后实现绳子的延长,在绳子达到最大距离后,绳子的状态变为收缩。

旋转我们可以用欧拉角或者四元数来做,

本次选择四元数:

Unity里提供了非常多的方式来创建一个四元数。例如:

Quaternion.AngleAxis(float angle, Vector3 axis)

它可以返回一个绕轴线axis旋转angle角度的四元数变换。我们可以一个Vector3和它进行左乘,就将得到旋转后的Vector3。在Unity里只需要用一个“ * ”操作符就可以进行四元数对向量的变换操作

绳子的延长可以用Lenth来记录随着时间增加。

注意:同时抓钩作为绳子的子物体应该同时变为1/Lenth。

3、抓取物品

首先确定我们抓取物体的部位是绳子的子物体抓钩,为抓钩添加Rigidbody刚体组件,再添加一个Circle Colider 2D。

再为Rope创建一个C#脚本作用为抓取.检测如果Colider2D有碰撞,直接变为自己的子物体。并调用根节点中的GameManage脚本中的收缩函数。

为每一组的物体添加标签。

在返回的过程中首先需要仅用Colider2D避免再次触发碰撞检测。

4、分数增加,时间减少

首先需要在GameManage层的C#脚本中获取Unity Engine UI,设置grade,times。

timetext此处需要转换为int类型。添加switch语句判断根据抓取物体的不同,增加不同的分数。

在这里分数的增加需要首先判断抓钩是否抓到物体,如果抓到了子物体调用Getchaild()来增加对应的分数。

当分数增加后,抓钩需要销毁物体,调用Destroy函数。

7、源代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public enum State//状态
{Rock,//摇摆Stretch,//拉伸Shorten//缩短
}public class GameManage : MonoBehaviour {private State state;private Vector3 dir;private Transform rope;private Transform ropeCord;private float length;private int grade;private float times;public Text timeText;public Text gradeText;public State GetState{set { state = value; }get { return state ; }}void Start () {state = State.Rock;dir = Vector3.back;rope = transform.GetChild(0);ropeCord = rope.GetChild(0);length = 1;times = 60;grade = 0;}void Update () {if (times <= 0) { times = 0; UnityEditor.EditorApplication.isPlaying = false; return; }if (state == State.Rock){Rock();if (Input.GetMouseButtonDown(0)) state = State.Stretch;}else if (state == State.Stretch){Stretch();}else if (state == State.Shorten){Shorten();}times -= Time.deltaTime;timeText.text = ((int)times).ToString();gradeText.text = grade.ToString();}private void Rock(){if (rope.localRotation.z <= -0.5f)//0.5f为60度dir = Vector3.forward;//逆时针else if (rope.localRotation.z >= 0.5f)dir = Vector3.back;//顺时针rope.Rotate(dir * 60 * Time.deltaTime);}private void Stretch(){if (length >= 7.5f) { state = State.Shorten; return; }length += Time.deltaTime*5;rope.localScale = new Vector3(rope.localScale.x, length, rope.localScale.z);ropeCord.localScale = new Vector3(ropeCord.localScale.x, 1 / length, ropeCord.localScale.z);}private void Shorten(){if (length <= 1){length = 1;state = State.Rock;if (0 != ropeCord.childCount){grade += GetGrade(ropeCord.GetChild(0).tag);Destroy(ropeCord.GetChild(0).gameObject);}ropeCord.GetComponent<Collider2D>().enabled = true;return;}length -= Time.deltaTime*5;rope.localScale = new Vector3(rope.localScale.x, length, rope.localScale.z);ropeCord.localScale = new Vector3(ropeCord.localScale.x, 1 / length, ropeCord.localScale.z);}private int GetGrade(string tag)//每次得到的分数{int num = 0;switch (tag){case "Rock":num = 10;break;case "SmallGold":num = 50;break;case "Gold":num = 100;break;case "BigGold":num = 200;break;case "Mouse":num = -1000;break;case "Diamond":num = 500;break;}return num;}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CheckObjects : MonoBehaviour {public void OnTriggerEnter2D(Collider2D other){other.transform.parent = transform;transform.root.GetComponent<GameManage>().GetState = State.Shorten;for (int i = 0; i < transform.childCount; i++){transform.GetChild(i).GetComponent<Collider2D>().enabled = false;}transform.GetComponent<Collider2D>().enabled = false;}
}

基于Unity3D的黄金矿工相关推荐

  1. 基于Java+Swing+Mysql实现《黄金矿工》游戏

    基于Java+Swing+Mysq实现<黄金矿工>游戏 一.系统介绍 二.功能展示 三.其他系统 四.获取源码 一.系统介绍 <黄金矿工>游戏是一个经典的抓金子小游戏,它可以锻 ...

  2. C语言实现基于easyx的(低配版)黄金矿工游戏

    目录 一.项目环境 二.游戏说明 三.运行演示 四.代码 总结 一.项目环境 Visual Studio 2019+EasyX 20220116 二.游戏说明 与黄金矿工游戏类似,每关限时90s(可自 ...

  3. 黄金矿工游戏demo

    试玩地址:  http://www.adanghome.com/js_demo/13/ 请使用chrome.firefox或safari.ie的话,请大于ie8. 按空格键扔出钩子,按左右键控制矿工移 ...

  4. unity3d 虚拟博物馆_基于Unity3D的虚拟博物馆信息可视化系统①

    基于 Unity3D 的虚拟博物馆信息可视化系统① 任国栋 1, 陈林华 1, 陶学锋 2, 方先行 2 [摘 要] 摘 要 : 信息可视化技术可以帮助我们加深对大规模复杂数据和信息间 相互关系的理解 ...

  5. 2018级C语言大作业 - 黄金矿工

    黄金矿工 C语言作业 分享18级同学大一上学期用C语言实现的黄金矿工.分步骤代码.图片音乐素材.可执行程序可从百度网盘下载: 链接:https://pan.baidu.com/s/1xCy1l2-7Q ...

  6. java 金数据推送数据_基于JAVA的黄金数据接口调用代码实例

    代码描述:基于JAVA的黄金数据接口调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/29 1.[代码][Java]代码 import java.io.Buffer ...

  7. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  8. 基于Unity3D 的Vuforia SDK开发基础教程

    前言 增强现实技术是当前信息技术领域的一项重要的综合性技术,融合了模式识别.计算机图形学等多个学科的知识.今天我们就和大家一起来看一下,这个技术到底可以带给我们什么吧.   左边是通过手机观看图片,可 ...

  9. 你的记忆里有黄金矿工吗?

    黄金矿工是大概是我初中时候玩的游戏吧,记忆中的样子是一群人围在一个电脑傍边,两人一组,输了就换下一组,虽然它不上现在游戏的丰富的游戏内容.但是就是让人欲罢不能,成为一款经典! Java游戏项目黄金矿工 ...

  10. 项目二 黄金矿工 1

    黄金矿工 第一部分 1 绘制窗口 2 背景绘制 3 红线绘制 4 线的延长和收回 6 金块绘制 7 闪动问题解决 8 抓取判定与返回 9 添加多个金块 10 解决金块消失的bug 11 创建石块类 第 ...

最新文章

  1. Autolayout学习(1)-了解Autoreszing
  2. SAP Spartacus shipping address页面请求1 - Address
  3. 交流电的有效值rms值_交流电路中的电源
  4. 设备管理器android感叹号,设备管理器其他设备感叹号
  5. 储粮过冬?消息称中芯国际大举向设备、零件商囤货
  6. SQL Server 函数的使用(转换函数)
  7. C#制作、打包、签名、发布Activex全过程【转】
  8. 使用缓冲字符流BufferedReader和文件字符流FileReader读取文本文件
  9. 关于数字化营销,最通俗的讲解在这里
  10. opencv实现银行卡卡号识别
  11. php微信获取openid_PHP微信网页授权获取OPENID
  12. 123456789中间任意加+或-结果等于100
  13. 大话卫星导航中的信号处理系列文章——目录
  14. LG发布新专利,将为VR头显集成眼球追踪技术
  15. Java深度历险(四)——Java垃圾回收机制与引用类型
  16. (UE4)UI小功能之按钮逐次显示
  17. 网易极客战记-KITHGARD地牢--健忘的宝石匠
  18. 拼多多之所以壮大,在于淘宝对利益过度痴迷
  19. 高德地图和百度地图生成网址
  20. BIGEMAP矢量数据下载【道路路网(公路、铁路)、水系、建筑物轮廓、地名等等】

热门文章

  1. 个人第1次作业:阅读与准备作业
  2. js下载文件格式为Excel后提示与文件扩展名不一致,打开文件前请验证文件没有损坏且来源可信.
  3. MNE预处理脑电数据
  4. 直流电源_稳压管稳压电路
  5. Puppet nginx+passenger模式配置
  6. 微信小程序学习(二)党费计算实例
  7. Convex Optimization 读书笔记 (1)
  8. 论文学习笔记:Detecting and quantifying causal associations in large nonlinear time series datasets
  9. 红帽linux9 iso,RedHat Linux9.0 ISO 原版下载
  10. linux红帽子安装ftp,Red Hat Enterprise Linux 5 (红帽子企业版5)下Samba, VSFTP配置与安装...