04 塔防底板布局 (和儿子一起编游戏-塔防系列 )

2023-12-05 04:10

本文主要是介绍04 塔防底板布局 (和儿子一起编游戏-塔防系列 ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

4.1 基本概念

从简单的来讲,塔防的底板由供坏蛋行走的路线,供安放炮塔的底座,起始点和终止点组成,成品的效果是这样的:

要做成上面说的底板,就要涉及到Unity3D Prefab,这是一个预制件概念,也就是说我们做供坏蛋行走的路线,供安放炮塔的底座的时候,先做好一条路线,一个底座,然后把他们放到Prefab包里面,凡是从Prefab包里面拉出来的部件,只要Prefab部件属性改了,就一起都改了。

底座集合:

      底座

路线集合

      路线

起点

终点

虽然只能看到一张地图,小余已经约摸知道老爸准备做什么了,乖乖的坐在老余身后看,一边看还一边吃手指头。这小子不知道什么时候染上这个毛病,一专注就吃手指头,好像手指头上有美味。

4.2 百闻不如一练 – 底座

老余多年的强迫症又犯了,他看不惯所有的东西都乱七八糟堆一块,尤其见不得那些把文件堆满Windows桌面的人,所以他在Assets目录下做了一个分类:

Imports:存放以后要导入的一些素材包

Materials:物体的自定义材质

Prefabs:游戏里面的预制件都放在里面

Scenes:游戏场景,包含主菜单,闯关分析,各个游戏关卡

Scripts:游戏的C#程序脚本

因为是小制作,老余就分了这些目录,如果是大游戏,里面的目录还可以再继续分解。

老余刚开始还有点手生,每一步都慢慢做,生怕那个地方没弄对就前功尽弃,不过在手生也得开个头把16*16的方块底座给搞定了,先用Unity3D(以后统称U3D,简单点)做出来一个Cube,给它一个名字叫Node,然后把这个Node重置到图中央的位置,直接上图,一目了然

这时候就可以看见我们的初始Cube了,真的是好丑:

就算是老余那种能将就的都受不了了,当务之急就是把底座整美一点,这时候就需要创建材质了:

老余想把材质做成白色,带一些Emission反光的效果,材质球名称叫Node_Mat跟之前的Node名称关联,没别的意思,方便查找吗。

然后老余把这个材质托拽到Node的Materials中Element 0里面。

这就是白色材质Node_Mat应用到Node上面的效果,老余非常鸡贼的一点就是他会用Prefab,他把Node托到Prefab中,以后铺16*16的“地砖”的时候,就从Prefab里面拉出来,改了Prefab属性,那些地砖都会变:

接着老余做了一个底座集合叫Nodes,用来统一管这些地砖,以后你就能看到这个集合的好处了,你想想16*16就是256块地砖(Node)出现在列表中,想找点别的物件都难。

创建一个空对象,Reset到中间位置(怎么Reset的放地砖的时候老余试过了,所以很easy),然后把做好的Node拉到Nodes下面,看见没,多出来一个小三角,可以折叠的。

这下面就有点力气活的意思了,要摆16*16的砖块,不过U3D有复制功能,做好16个,复制就行,复制的命令是CTRL+D

4.3 敌人的路线

复制粘贴完毕,老余想了一条路径,让游戏里面的坏蛋们通过,很好办,把地砖抠出来删除掉就行

抠出来的大洞要用另外一个物件(路线)补上,老余就叫它Ground了,Ground的集合叫Environment,老余英文不错,因为IT技术还是美国强大,很多好资料都是用英文写的,不会点英文,确实是短板。

注意看老余不光把Ground弄到Prefab里面了,还创建了一个暗灰色的材质球,最后把Ground挂在Environment那个节点下面,老余的动作是越来越快了

记得把Box Collider拿掉,因为走道不需要碰撞器(Collider)

Ground置备好了后,就开始新一轮铺地砖了

老余是个偷懒的人,他嫌一个一个放麻烦,直接就用U3D的拉升工具(快捷键T)直接拉满了

4.4 有始有终

最后,老余准备着放一个起点(START)和一个终点(END),这两个倒是不需要Prefab,因为各有一个吗!老余用的方法跟前面的没有两样,飞快地(一上午)搞定了。

这篇关于04 塔防底板布局 (和儿子一起编游戏-塔防系列 )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器