本人是在学习完c,c++,数据结构算法,操作系统网络这些基础的课程之后,打算学习自己喜欢的游戏开发方向的东西,然后在B站上自学了几天unity,用到unity的触发器,碰撞,刚体,以及一个简单的ui界面,但是本人目前没有c#的学习经验,但是拿c++的经验也能写出一些基础的游戏脚本,这里的参考书籍是《新印象--unity2020游戏开发基础与实战》,适合有一些编程基础的人来观看。

我将从unity的新建项目开始来一步一步的完成这个小游戏

环境为unity2021.3.16 编译器为VS2019

目录

小游戏拆解

场地的搭建

角色的移动

玩家与墙体的碰撞检测

玩家吃金币的实现

金币吃完解锁大门

玩家达到指定点结束游戏胜利

角色血量与UI的绑定

项目文件


小游戏拆解

首先这个迷宫小游戏大致分为几个逻辑模块

首先问题是我们如何让角色移动起来

还有角色与墙体的碰撞检测

角色吃金币的实现

金币吃完解锁大门

玩家达到指定点结束游戏胜利

角色血量与UI的绑定

接下来将分为这些模块来将这个简单的小游戏来逐步的拆解

场地的搭建

先新建一个3d项目

就会得到了这个界面,这就是unity的基础界面

我们在这里改成2*3格式

然后我们就可以开始开发了

我们在右键菜单栏里面新建一个平面

然后在场景窗口选中调整缩放

这样我们就可以把这个平面成为自己的迷宫地面了

然后我们在项目栏新建一个材质,并且调整一个自己喜欢的颜色

然后将新建的材质拖到平面上进行绑定

然后接下来我们来为迷宫的墙体制造,就是将立方体选装缩放成为墙面,这里就直接略过创建过程了

这样就将迷宫的基本框架搭建完成了,接下来制作金币的形状,就是将圆柱体缩放选装,并且添加上金色的材质

然后创建一个平面作为我们的终点,一个门作为阻碍,并且创建一个球体作为我们的玩家

这样我们就将游戏里面的基本地形搭建完成了。

角色的移动

实现角色的移动有很多种方法:角色控制器,或者调整Transform组件,这里选装用刚体组件控制球体的移动

我们为球体玩家添加rigidbody组件,并且新建一个c#脚本来控制方向。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerMove : MonoBehaviour
{//设置默认移动速度public float player_speed = 4.0f;//设置玩家血量public int health = 3;//设置玩家刚体组件private Rigidbody rBody;// Start is called before the first frame updatevoid Start(){//初始化玩家刚体组件rBody = GetComponent<Rigidbody>();}// Update is called once per framevoid Update(){//获取玩家水平移动方向float horizontal = Input.GetAxis("Horizontal");float vertical = Input.GetAxis("Vertical");//将两个方向合成一个向量 0 是因为我们不需要y轴移动Vector3 dir = new Vector3(horizontal, 0, vertical);if (dir != Vector3.zero){//将移动方向传给刚体组件rBody.velocity = dir * player_speed;}}
}

此时我们就可以将玩家成功移动了

玩家与墙体的碰撞检测

首先我们先选中迷宫的全部墙体,并且为全部的墙体添加Wall标签

然后添加碰撞检测的功能

我们可以看到,当碰撞超过三次,玩家就销毁自身了

玩家吃金币的实现

首先我们玩家需要吃金币而不是碰撞到金币,所以我们就需要让金币成为一个触发器,当金币被玩家触发,销毁自身,达到吃金币的效果。

首先我们为玩家添加Player标签

然后编写金币的脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class gold : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){}//unity提供的进入触发函数private void OnTriggerEnter(Collider other){if (other.tag == "Player"){//检测到玩家的触发,销毁自身Destroy(gameObject);}}
}

并且将金币设为触发器

我们看到这就成功将金币吃掉了

接下来我们为金币添加一个自动旋转的功能

可以看到,我们要是想让金币旋转,需要让金币绕着x轴旋转

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class gold : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){transform.Rotate(Vector3.right * 90 * Time.deltaTime);}//unity提供的进入触发函数private void OnTriggerEnter(Collider other){if (other.tag == "Player"){//检测到玩家的触发,销毁自身Destroy(gameObject);}}
}

这样金币的基本功能,就基本实现了。

金币吃完解锁大门

这个实现我是利用一个空的游戏对象,作为一个金币管理器,当三个金币成为金币管理器的子物体,当金币管理器成为金币的父对象,然后检测这个金币管理器的子物体个数,当子物体为0时,销毁门。

创建一个空对象,作为金币管理器

将三个金币作为管理器的子物体,然后新建一个c#脚本来实现开门的逻辑

我们创建一个共有的对象,然后保存脚本

这样我们就可以在unity界面看到一个游戏对象选项,我们拖动door绑定到游戏对象上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class opendoor : MonoBehaviour
{public GameObject door;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){//当子对象为0时,销毁大门,然后销毁自身if (transform.childCount <= 0){Destroy(door);Destroy(gameObject);}}
}

这样我们就实现吃完全部金币开门的功能了

玩家达到指定点结束游戏胜利

这里我们还是来用触发器实现

我们将结束点这个平面设置为凸面,和触发器,并且新建一个脚本来实现控制游戏胜利

我们先新建一个ui画布,并且设置为2d视图

然后我们右键画布-》ui-》文本,并且导入Tmp的两个包

修改颜色和字体,我们可以,看到胜利显示在我们的游戏画面上,我们将这个字体设置为不激活状态,这样就不会直接显示到现在的界面上,当玩家走到指定位置我们再将文本激活,显示到玩家的UI上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class end : MonoBehaviour
{//得到文本public GameObject txt;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){}private void OnTriggerEnter(Collider other){if (other.tag == "Player"){//设置激活txt.SetActive(true);Destroy(gameObject);}}
}

这样我们可以看到游戏就正常结束了。

这样其实基本的游戏功能就实现了。

角色血量与UI的绑定

我们需要将血量也显示到ui上,接下来同样在画布上新建一个文本

拖到画布的左上角,设置好文本和颜色

然后新建一个脚本

拿到我们的玩家物体,和自己的文本,然后获取玩家的血量显示出来

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor.UI;
using TMPro;public class UIhealth : MonoBehaviour
{public GameObject player;public TMP_Text text;// Start is called before the first frame updatevoid Start(){text = GetComponent<TMP_Text>();}// Update is called once per framevoid Update(){//获取玩家血量int hp = player.GetComponent<PlayerMove>().health;//修改显示文本text.text = "health:" + hp;}
}

这样我们可以看到血量成功显示到UI上了

然后我们把主摄像机的位置调整下,就可以成功完成整个游戏了

选中主摄像机,按ctrl+shift+f,移动到场景所显示的位置

并且将投影设置为正交,这样就可以让我们的观看更加的轻松

这样我们整个项目就完成了开发

项目文件

链接:https://pan.baidu.com/s/1rBvYlLo5l2NNZPopze3rkQ 
提取码:jina

感谢您能看到这里,这是我初学unity以来的第一个项目,您也可以尝试自己添加其他元素

Unity-3d小游戏开发-----走迷宫相关推荐

  1. c语言大作业走迷宫,C语言笔记07_小游戏设计——“走迷宫”

    C语言07 小游戏设计--走迷宫 目标: 我们要设计一个完整的小游戏"走迷宫".你将可以通过控制键盘上的"W"."S"."A&qu ...

  2. unity微信小游戏开发【含源码】

    经过 经过断断续续一个多月的开发, 10次左右大大小小的修改, <熊猫奇遇记>开发完成. 遗憾 遗憾的是小游戏并没有通过微信的审核,4次全败, 每次都是会修改很多东西, 再经过朋友们的试玩 ...

  3. C语言实现小游戏:走迷宫

    走迷宫: 1.定义一个二维数组作为迷宫 2.定义老鼠的坐标 3.获取游戏开始时的时间time(NULL) 4.进入循环 1.system 清理屏幕 2.显示迷宫(遍历二维数组) 3.检查是否走出迷宫 ...

  4. 边学边做Unity 3D小游戏日常(二)

    前言 书接上回,这段时间没发新内容,主要是在学技能系统的编写.以及角色模型提取去了.角色模型我用的是英雄联盟里的 亚索(托儿索) 模型(律师函警告!). [在这里我首先表明下 仅作 学习 用途,侵必删 ...

  5. python小游戏毕设 走迷宫小游戏设计与实现 (源码)

    文章目录 0 项目简介 1 课题背景 2 实现效果 3 Pygame介绍 4 具体实现 4.1 创建迷宫 4.2 定义角色类 4.3 界面切换 5 最后 0 项目简介

  6. 视频教程-Layabox3D游戏开发入门-微信3D小游戏案例 -微信开发

    Layabox3D游戏开发入门-微信3D小游戏案例 有多年Unity程序开发经验,有策划和美术设计的经验.愿意在csdn这个平台和大家一起分享! 金龙 ¥29.00 立即订阅 扫码下载「CSDN程序员 ...

  7. 《Unity 3.x游戏开发实例》一1.5 欢迎来到Unity 3D

    本节书摘来异步社区<Unity 3.x游戏开发实例>一书中的第1章,第1.5节,作者: [加]Ryan Henson Creighton 译者: 师蓉 责编: 陈冀康,更多章节内容可以访问 ...

  8. 《Unity 3.x游戏开发实例》——1.5节欢迎来到Unity 3D

    本节书摘来自异步社区<Unity 3.x游戏开发实例>一书中的第1章,第1.5节欢迎来到Unity 3D,作者邓文渊,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  9. 白鹭引擎助力《迷你世界》研发团队开发3D小游戏版

    <迷你世界>作为国内第一的放置类3D沙盒游戏,依靠三四线城市的游戏市场及垂直媒体的传播途径,研发团队用了短短3年时间就创造出了8000万活跃玩家.5000万玩家原创作品,仅2020年上半年 ...

最新文章

  1. 帝国cms php7.0,帝国cms升级到7.0 出现Unknown错误的解决办法
  2. golang中的byte与rune
  3. 斯坦福iOS7公开课4-6笔记及演示Demo
  4. 【编程题目】求二叉树中节点的最大距离
  5. 破解百度翻译页面api参数加密
  6. scala学习手记28 - Execute Around模式
  7. mvc4 html.beginform,MVC4 Html.BeginForm在Internet Explorer中提交按钮 9不工
  8. 2019年最流行的10个前端框架
  9. 玩转oracle 11g(1):Oracle 11g的安装
  10. 图象关于y轴对称是什么意思_数学概念丨“图象”与“图像”是有区别的 ,你知道吗?...
  11. squid的简单介绍
  12. linux kill -9 杀不掉的进程
  13. 《计算机系统:系统架构与操作系统的高度集成》——1.6 操作系统的演化
  14. office mime type
  15. centos双网卡不能同时工作解决
  16. UWB定位技术原理图解
  17. Windows 程序注册表常用键名——CurrentVersion
  18. asp毕业设计——基于asp+sqlserver的英语网络考试系统设计与实现(毕业论文+程序源码)——网络考试系统
  19. 测试分析与测试用例设计方法
  20. springmvc入门:web.xml编写

热门文章

  1. PHP弹出对话框的方法
  2. matlab东大教授_杜睿 - 东南大学 - 数学学院
  3. 哔咔服务器维护时间,哔咔
  4. 如何隐藏控制台程序的窗口
  5. 运行易语言必须放在c盘才能打开,易语言怎样写隐藏运行图片里的文件
  6. unity shader 边缘光,内发光,外发光,轮廓边缘光,轮廓内边缘光,轮廓外边缘光
  7. Sia(Siacoin/SC/云储币)去中心化存储平台网址汇总
  8. java集成企业微信完成授权登录
  9. 软件测试有哪些常用的测试方法?
  10. Python—实现语音自动播报最新疫情信息