# 【幕后花絮：Salmonomicon】Salmonomicon创作者的提示、技巧和秘密

By [Decentraland 中文社区](https://paragraph.com/@decentraland-2) · 2022-03-28

---

![](https://storage.googleapis.com/papyrus_images/779a79bc2e00182ab28759682ca5c6c1fb5333391ee9fc5147baabb42ec25d17.jpg)

_2020-4-23文章_

欢迎来到我们系列中有关创作者的作品、技巧和秘密的第二篇文章，我们积极制作使Decentraland栩栩如生的游戏和体验。

在这篇文章中，我们来看看游戏Salmonomicon。

尽管该游戏在Decentraland发行活动中引起了人们的广泛关注，但实际上是在去年9月创建的（在Decentraland的时间就像一年前一样）。它是由Decentraland开发人员团队（Pravus、Mauricio和Nico）作为内部黑客马拉松的一部分而构建的，并利用了一些我们想分享的巧妙技巧。

您可以在我们的公共GitHub存储库中找到该场景的完整代码。随意接受想法并将其用于您自己的项目：[https://github.com/pravusjif/salmonomicon](https://github.com/pravusjif/salmonomicon)

如果您不熟悉该场景，则也可以跳入世界并进行游戏：[play.decentraland.org/?position=-56,1](https://bihu.info/)

或观看此演示视频：[https://www.youtube.com/watch?v=H78Mv\_u-wJk](https://www.youtube.com/watch?v=H78Mv_u-wJk)

但是，关于我们如何构建Salmonomicon的细节！

射线广播
----

光线投射是游戏开发中的常用工具。它基本上包括在空间（“射线”）中追踪线并检查该线是否与任何其他对象相交。通常用于模拟AI的视野或计算子弹的轨迹。

在开发Salmonomicon时，仅在Decentraland SDK中添加了射线广播，因此我们围绕着开发利用此功能的游戏的想法开始了集思广益。

在游戏中，怪物经历两个不同的阶段。在每个阶段中，它以不同的方式使用射线广播。

在这些阶段的第一个阶段，怪物出没了你，并一直朝着玩家缓慢移动。如果玩家注视着怪物，那么它移动的速度甚至更快。击败怪物的方法是始终远离它-这与我们的本能背道而驰，使我们感到不安，不知道我们处于何种危险之中。这是制作恐怖游戏体验的完美要素！

为了使这个机制参与我们的游戏，我们做了以下工作：

• 在每一帧中，我们在两点之间绘制了一条光线：玩家的位置和怪物的位置，然后检查该线是否击中了其他任何物体 • 如果玩家和怪物之间有东西，例如树或墙，我们认为玩家不在怪物的视野内并且安全 • 我们还计算了所追踪的光线与玩家观看方向之间的角度。当玩家面对更接近怪物的方向时，角度变得更小。因此，发生这种情况时，怪物开始移动得更快。

在游戏的第二阶段，一旦收集了所有页面，怪物就旋转到位，从其眼睛射出激光（当然！）。在这里，我们以不同的方式使用光线投射。我们想检测玩家是否被激光击中，但是不幸的是，我们没有一个可以被射线击中的“玩家”物体（目前还没有……有趣的项目需要继续研究）。因此，解决此问题的方法是跟踪两条不同的光线：

• 玩家的位置和怪物的位置之间有一束光线。在每一帧上，我们检查它们之间是否有任何物体，如果有，则将播放器屏蔽激光。 • 第二缕朝着怪物看的方向走去。如果在怪物旋转时射线碰到任何障碍物，那么我们会缩短发光的红色光束以使其匹配，以使激光看起来不会刺穿树木。

我们最终比较了这两条射线的方向。它们很难完全相等，因为一帧必须完全正确地着陆才能发生，因此我们测量了两条射线之间的角度并考虑了误差范围。如果它们之间的角度足够小，则可以确定怪物正面对玩家。一旦我们确认怪物正面对玩家，并且中间没有障碍物，那么可以肯定地说玩家被激光击中了。

是否想在自己的项目中使用光线投射？在我们的文档中了解有关如何使用它的更多信息：[https://docs.decentraland.org/development-guide/raycasting/](https://docs.decentraland.org/development-guide/raycasting/)

UI手
---

在玩游戏时，您会带着Mika的断头随身携带；米卡（Mika）是布宜诺斯艾利斯Decentraland总部的厨师。他很友善，不知道我们将这些图片用于什么奇怪的事情，因此可以为他拍照。

我们选择在UI上将他的头部显示为2D图像，而不是3D对象。 3D对象与播放器一起移动看起来不那么顺畅，因为对象的位置调整不完全与每一帧保持同步，从而导致分散注意力。 2D还使我们能够纪念《毁灭战士》等经典游戏的遗产。

当您寻找书中丢失的页面时，Mika的眼睛会引导您朝着最近的页面方向前进。为此，我们使用了Mika朝不同方向看的几张不同图片。我们没有将所有这些图片都使用单独的图像，而是将它们全部放置在一张Sprite表中。我们一次只显示图像的一部分，而只是从一个图像映射切换到另一个。事实证明，这比拥有单独的图像要有效得多，因为我们不必在播放过程中将图像加载和卸载到内存中。

![](https://storage.googleapis.com/papyrus_images/648c9a82ee6c2ab0840437525ec1d5c3981a46ed4a24184a782b06371e9d0602.png)

一件奇怪而出乎意料的事情：在制作游戏时，Decentraland 没有第三人称摄影机。当我们稍后使用第三人称摄影机测试游戏时，看起来就像是在追逐自己。

![](https://storage.googleapis.com/papyrus_images/220eea9747a0ff228bba8c0a554e1cceb739db8bfe03aca0b141c6a0df0f4b1b.png)

在我们的文档中了解有关如何在场景中使用UI的更多信息：[https://docs.decentraland.org/development-guide/onscreen-ui/](https://docs.decentraland.org/development-guide/onscreen-ui/)

天空盒
---

我们团队中的画家Mauricio尝试了一个非常不错的技巧，为我们的游戏增添了怪异的另一面。

天空环绕着场景，增添了夜空和幽灵般的森林背景。这样做的创新之处在于，模型的法线有意只面向内，这意味着，如果从外部观看场景，则只会看到背景，而没有任何东西挡住场景内部的视野。进入屋内后，您将完全沉浸在森林中。

![](https://storage.googleapis.com/papyrus_images/d14f12ceb4836241275c504c554d16a1bbca35aff13bf5399d79cdbbca70b471.png)

这个Skybox网格还包括仅具有法线朝内的对撞机，因此，您可以轻松地走进去，但是那样就不能离开……直到击败Salmonomicon的诅咒。赢得比赛后，天空盒将被移除，您可以自由走开。移开天空盒也使其恢复了白天，这对场景的外观和完美地伴随着胜利的音乐产生了戏剧性的影响。

在文档中阅读有关Decentraland的3D建模的更多信息：[https://docs.decentraland.org/3d-modeling/3d-models/](https://docs.decentraland.org/3d-modeling/3d-models/)

请与Decentraland的更多现场明星保持联系，以留意未来的帖子，其中包括幕后观看诸如Block Runner，Dragon Race等项目。您也可以查看我们在[The Infinity Engine](https://mirror.xyz/0x85A07dC63fF774b86eEdB62563d05D72bcbE8854/OUiX-rW-mlufagwNYuh3ysW3EykXC8jgisMV27PNxfw)的文章。

**选择您常用的频道加入与我们联系，关注Decentraland(MANA)的最新动态**

**DCL基金会全球社区： 【**[**Official Website**](https://decentraland.org)】 【[**Telegram**](https://t.me/decentralandTG)】 【[**Blog**](https://blog.decentraland.org)】 【[**Twitter**](https://twitter.com/decentraland)】 【[**Discord**](https://decentraland.org/discord/)】

**DCL中文社区： 【**[**电报群**](https://t.me/+BtB90_SKDeQ4OGQ1)**】 【**[**推特**](https://twitter.com/decentralandcn)】 【[**微博**](https://weibo.com/decentralandcn)】 【**微信群**】请加微信ID ChinWaan 【**微信公众号**】manalandcn

---

*Originally published on [Decentraland 中文社区](https://paragraph.com/@decentraland-2/salmonomicon-salmonomicon)*
