RPG 游戏开发(8)绘制地图
上篇文章,我们把调色板做好了。这时候点击调色板的画笔工具(注意,不要在 Edit 模式下点击)然后将鼠标放到 Scene 面板上,可以看到图块可以被画到游戏界面上。可是很奇怪,好像画面上只能放置几个图块,然后感觉图块之间的间隔特别大。 这是因为我们导入这个图集(Atlas)的时候,设置的 Pixel Per Unit 是 100,所以代表一个方块有 100 × 100 个像素点。可是我们的图块实际上只有 16 × 16 个像素点。 在 Hierarchy 面板中,点击 Grid 然后在其 Inspector 面板中的 Cell Size 属性值里 x 和 y 分别写上 0.16(我们在设镜头设置那篇文章中有提到过)。这是因为图块定义 100PPU,可实际是 16PPU,所以 16 / 100 = 0.16。调整完之后,就可以顺利在界面上进行绘制了。 我们在 hierarchy 面板中创建的 floor 图层用于放置作为背景的图块(例如地板),我们还可以另外添加如 wall、accessories 图层。并且对某些图层设置碰撞体,使角色不能通过该碰撞体或者触发陷阱。 回到 Til...
RPG 游戏开发(7)创建 Tile Palette
本来这篇文章需要推迟发布的……因为最近正在考虑入手工作机,刚刚都一直在挑选电脑。但是已经跟各位读者约定日更2篇了,只能硬着头皮冲! 上个教学,我们搞了一堆地图块,现在我们要将其转换成 Tilemap 以便我们可以用画笔的方式直接把图块画上去制作地图。 在上方菜单栏点击 Window / 2D / Tile Palette,弹出 Tile Palette 面板。因为要一直用到 Tile Palette 所以我们将他的面板固定在某个比较容易使用的位置。通过点击 Tile Palette 标签,可以直接拖动面板,将其放置在所需的位置即可,我们放在如下位置: 然后我们在 Hierarchy 面板中右键,2D Object / Tilemap / Rectangular 创建 Tilemap,然后将其命名为 floor(不是命名 Grid 而是明明 Grid 的子组件)。然后我们点击刚刚命名的 floor 组件,可以看到他有个 Tilemap Renderer 的元件。里面有个属性是 Sorting Layer。是不是感觉似曾相识?之前我们在设置角色被地板当着的时候有用到这个属性。当时我...
RPG 游戏开发(6)准备更多图块
欢迎来到本系列教程的第二部分!第一部分我们讲解了工程创建直到玩家移动,现在我们来开始设计游戏场景。 首先,我们把之前在 Hierarchy 面板中放置的所有图块(wall 和 floor)删掉,只留下 player_0, Test_NPC 和 Main Camera。还记得怎么操作吗?因为是连贯的,所以我们点击第一个 wall 或 floor,长按 shift 再点击最后一个 wall 或 floor 就可以选取所有了,然后再点 delete 键将其删除。 接下来,我们要使用 Unity 的 Tilemap 来绘制地图。在这之前,我们需要更多的地图图块,所以回到 Project 面板,找到我们的 Atlas 图集,点击 Sprite Editor 进行切片。先前我们已经切了 wall_0 和 floor_0,我们知道这个图集里所有的图块都是 16 × 16 的单位。就算它比较高,那么也是 32 × 16,都是 16 的倍数。 准备图块那么接下来我们切几个图,注意所有名字都从 0 开始,以方便管理,如:wall_0, wall_1。接下来我们切好几个图: 地板 墙壁 回复泉水 楼...
RPG 游戏开发(5)镜头跟随
比起传统的镜头跟随,我更喜欢一种镜头 - 玩家在一定的范围里移动,镜头位置保持不变,当玩家超出该移动范围,则镜头开始追随玩家,直到玩家再次出现在限定的范围里。 点击 Main Camera 打开摄像头的 Inspector 界面,我们添加一个自定义脚本,命名为:CameraMotor,创建方法和创建 Player 脚本是一样的。然后我们将 Project 面板里的 CameraMotor 文件拖拽到 Scripts 文件夹里。 双击用 Visual Studio 打开 CameraMotor 源文件 删掉所有在 CameraMotor 类里面的函数(Start 和 Update),然后 ctrl + shift + m 打开 Unity 函数库,找到 LateUpdate 函数,点击添加。该函数在 Update 和 FixedUpdate 之后才被调用。因为我们需要在逻辑上让玩家先移动,镜头才跟随。这样不会让玩家产生奇怪的视觉效果。 在代码里,我们需要镜头跟随一个目标,所以我声明一个变量 public Transform lookAt; 将其修饰符写为 public,以便我们可以...
RPG 游戏开发(4)绘制地板和NPC并实现碰撞检测
首先,我们将 Atlas 素材里一开始我们准备好的 player_1 素材拖曳到 Hierarchy 面板。这时候就会产生第二个角色。我们在 Hierarchy 面板中选中刚刚加入的 player_1,然后在 Inspector 面板中,最顶端的 player_1 改为 Test_NPC。以区分他是玩家或是 NPC,然后我们将他的坐标(Position)的 X 轴修改为 -0.2,让他出现在玩家左侧。 接下来,在 Inspector 面板中,点击 Add Component 按钮,添加一个 BoxCollider2D 元件,该元件就是用来检测物体碰撞,碰撞包括:触碰到NPC和其对话、触碰到怪物造成伤害、触碰到墙体无法继续前进等等。调整框的大小,这里我选择和我的玩家一样。 调整参数为:Offset X: 0, Y: -0.01,Size X: 0.1, Y: 0.1 制作地板我们点击 Atlas,然后在 Inspector 面板中点击 Sprite Editor。我们找到两个合适的图标作为地板和墙体。我选择了深色的块作为墙壁,并将其命名为 wall_0;然后选择另一个较为浅色的块...
RPG 游戏开发(3)角色移动
如果你是跟着上一篇文章来的,那么你的屏幕上应该有两个角色,我们先把 player_0 (1) 删掉,直接点击 Delete 键即可。 现在,我要让角色动起来。从这里开始,我们就会涉及到编程了。 不会编程的小伙伴不用担心,我会把所有代码清晰的复制粘贴到这里来。你们只需要理解每一行代码,并且给代码写上注释就行。方便以后你复习项目的时候,可以清楚的知道当初自己写了什么。 回到我们的 Hierarchy 界面,我们选中 player_0。然后在 Inspector 界面点击下方的 Add Component 按钮,添加新的元件。Unity 已经为我们准备了一大堆的元件库,但是现在我们需要创建新的元件(代码)。所以我们需要在元件库搜索框里输入 Player。然后列表会弹出两个元件,直接无视它,点击 New Script,然后点击 Create and Add 按钮。 这时候你就会发现 Project 面板的 Asset 目录下出现了一个文件:Player;并且你的 player_0 的 Inspector 面板也会出现一个 Player 的元件。如果没有的话,将刚刚创建的 Player 文...
RPG 游戏开发(2)相机设置
上一篇文章,我们说了怎么导入图片素材。接下来,我们点开我们导入的图片旁边那个小箭头,会看见两个我们切割出来的图片,我们选中 player_0,拖拽到 Hierarchy 面板里,这会使其出现在我们游戏场景的中央。或者你也可以拖曳到 Scene 面板里,随意把它扔到一个位置。这边我们直接放在 Hierarchy 面板。 完成这个步骤后,注意看 Inspector 面板的 Transform 元件(Component)的 Position 是不是都为 0(居中)。 拖进去之后,你会发现 Scene 面板里好像什么都没有。这是因为我们的素材太小了,只有 16 个像素。我们可以通过鼠标滚轮在 Scene 面板里进行缩放,然后通过鼠标中键移动位置。 接下来我们打开 Game 面板(ctrl + 2),会发现中间的人物超级无敌小!要调整这个呢,首先我们需要修改我们的目标界面分辨率。在 Game 面板的上方,有个 Free Aspect 下拉框。这个意思是你的游戏界面会随着你的窗口大小自适应。点开下拉框,我们可以选择 16:9 分辨率等。但是我们的游戏像素单位是 16px,所以我们将其改为 ...
RPG 游戏开发(1)导入图片素材
第一次做游戏教学文章,不知道大家会不会喜欢。在这里,我们用 Unity 2020.3.15f2 版本作为开发工具。 首先,在游戏目录里创建4个文件夹: Artwork 图片素材 Animation Levels Prefab 预制件 Scenes 默认会被创建,保存游戏场景(舞台) Scripts 代码 我们用以下素材进行演示,这个素材是由 0x72 设计的 16 × 16 像素图集。原链接在这里,作者将此素材免费分享。喜欢的可以打赏支持创作。 我们将这个图片直接拖到 Unity 项目里的 Artwork 文件夹里。 这个图片包含了: 场景(地图路块) 武器 怪物 角色 动态火炬 我可能会另外做一些像素图标,但是目前学习情况下用这个足够了。 我们将图集文件名改为 Atlas:选中图集,然后点击 F2 或右键点击 Rename 即可重命名。当你选中之后,会看见右侧 Inspector 面板里出现该文件的设定(如下图)。我们将其属性修改为跟下图一样。 Texture Type 决定这张图片是什么类型,我们选的是 Sprite 精灵图。 Sprite Mode = M...
什么是数字签名
在 比特币的原理 的文章里,我提到了数字签名这项技术。那这个数字签名是什么东西呢?它怎么去执行加密的? 生日碰撞在讨论数字签名前,先来了解生日碰撞的概念。以下涉及概率论,我会尽量说的简单点。 问题:一个班级有50个学生,至少两个学生生日在同一天的概率是多少?可能很多人都会觉得,一年 365 天,这概率很低。但是真的是这样吗?举个实例:中学的时候,我班和我同一天生日的就有三个人。 那么这个概率怎么算呢? 首先,我定义 P = 所有人的生日不在同一天的概率,那么 1 - P = 至少两个人生日在同一天的概率。如果全班只有 1 个人, P = 100%,因为 P = 365 / 365,一年有 365 天,他可以任选一天。全班有两个人,那么 P = (365 / 365) × (364 / 365) ,第一个人任选一天后,第二个人只能从 365 天里的 364 天选其中一天。以此类推,当全班有 n 个人,Pn = (365 × 364 × … × (365 - n + 1) ) / 365 n 当全班有 10 个人,则 P10 = 88.1%,也就是 88.3% 的概率全班不在同一天生...
比特币的安全
哈喽大家好!我是小麦。继上一篇文章,我总结了比特币的原理。那么这篇文章就会对比特币的安全问题进行研究,探讨比特币在所有记录是公开而且匿名的情况下怎么保证数据的安全。 在文章开始前,可以点击菜单的登录按钮,注册我们的官网账号。未来会有很多福利回馈给各位读者!谢谢各位支持! 哦对了!还有参考视频: 李永乐老师的Youtube:https://www.youtube.com/watch?v=pbAVauYsqP0 李永乐老师的BiliBili:https://www.bilibili.com/video/BV12b411q7ku 传统的身份认证我们在现实社会里用的身份认证有人脸识别、签名、指纹。这些是银行或者电子钱包证明“你是你”的手段。那在虚拟世界里,传统签名是不能被使用的。因为人脸、签名、指纹都能被电脑所储存并复制,是不安全的。 电子签名比特币的用户在注册的时候,系统会生成一个随机数。通过随机数,产生私钥(Private Key);再通过私钥产生公钥(Public Key)和地址(Address)。其中,每个钥匙的重要性是不同的。私钥是保密的,就相当于你的密码,他是必须保密的...







