游戏引擎:Unity 版本:2019.4.6f1 【2017版本以上均可】
前言交互门,是众多游戏中最为基础、常见的一种玩家与游戏场景的交互体验。本文将主要叙述记录关于交互门的制作思路、制作方法、制作过程中可能出现的一些问题上的疑难解答,以及拓展内容上需要注意避免的坑。 指导说明 ■ -指 这是一个Unity默认初始组件 ■ -指 Unity内置方法 ■ -指 这是一个重点【这个重点可能对全局操作有影响】
本文基础知识点你需要做好以下准备以便于更好理解: 1. 了解Unity工作界面 2. 熟悉掌握Unity常用基本组件 - ■ AudioSource - ■ BoxCollider - ■ Animator - ■ Animation 3.C#脚本开发语言
■ 注:若上述知识点尚未完全掌握,本文会提及内容讲解,但理解上可能会吃力,请谅解,或对知识点内容进行详细了解后再看本文。
—【若文章有遗漏或错误知识,请及时通知博主更新纠正】—
思考游戏源于生活,一切的游戏交互都是基于生活的现实体验来制作。根据生活反应,交互门的类别分为 手动门 与 自动门。如图示:
最为常见的交互方式 手动门需要直接接触 【门】的交互方式推门施加一个作用方向的水平推力锁门需要以一把钥匙作为是否允许交互媒介 在银行、酒店等高档消费场所见到的交互方式 自动门不需要直接接触【门】的交互方式纯自动门侦测对象是否出现在探测范围内权限门基于纯自动门,确认是对象且持有相应【权限】密码门需要输入正确密码杂项类指纹识别/眼睛识别/人脸图像门… 源于动画、小说中描述的交互方式 □□门拥有特殊功能的门交互方式电网门 【SCP:ContainBreach】对任何靠近电网的对象触发电击效果,每次电击生效间有时间间隔传送门【多啦A梦 任意门】【初级】-通过触发锚点来实现对象的坐标变化【中级】-实时显示终点画面来给予视觉上差异【高级】-增强角色在使用传送锚点的交互体验注:本文章不会讲解传送门相关内容,相关知识请移步以下链接。 非欧空间【了解】:非欧几里得世界引擎 传送门【实战】:【双语】游戏编程挑战:传送门 Coding Adventure: Portals
分析结合Unity游戏引擎提供的API,目前提供的实现思路有两种思路。
一、利用■ BoxCollider(碰撞器) 实现逻辑 以门自身为对象,挂载■ BoxCollider(碰撞器) 组件,勾选"Is Trigger",通过检测玩家进出触发区域实现门的交互行为。 优点: 可拓展性:当玩家进入检测区域后,我们可拓展检测之后的反馈效果。 - 直接执行门的开关交互。 - 添加交互按键E,增加玩家开门需求条件。 - 添加开门前提条件。 例如:需要玩家拥有某种特定物品、玩家必须为某一角色等。 ■ 特别注意:这里的添加开门前提条件主要是写在门身上。
上述3种API方式在Unity中的实现玩家与场景的交互行为上的使用频率较高。当然,并不仅限于通过这3种方法。Trigger(触发器) 在Unity中并没有作为组件出现,而是在■ Collider(碰撞器)中担任一功能出现。 ■即:只要是■ Collider(碰撞器)且组件下的 “Is Trigger” 均勾上,都能在C#脚本语言中实现触发器。
常用基本■ Collider(碰撞器) (■ 注意:以下组件均用于3D场景,2D场景均不适用。) ■ BoxCollider(盒碰撞器) ■ MeshCollider(网格碰撞器)
■ SphereCollider(球形碰撞器)
■ CapsuleCollider(胶囊碰撞器)
注:Add Component中,搜索"Trigger"会显示 ■Event Trigger(事件触发器),其不是文章提及的 Trigger。
二、利用■ Raycast(射线)的实现逻辑 以玩家自身为对象,由玩家身上的■ Camera(相机)发射■ Raycast(射线),根据■ RaycastHit(射线碰撞点)是否为门,进而实现门的交互。 优点: 可拓展性:【同上】 - 直接执行门的开关交互。 - 添加交互按键E,增加玩家开门需求条件。 - 添加开门前提条件。 例如:需要玩家拥有某种特定物品、玩家必须为某一角色等。 ■ 特别注意:这里的添加开门前提条件主要是写在玩家身上。
无论是■ Collider(碰撞器)还是■ Raycast(射线)均可实现门的交互行为。从笔者角度,在实现角色的一些交互行为上更偏向于使用■ Collider(碰撞器)来实现一些交互行为,不用强加于玩家身上的交互脚本上因为交互内容增多而导致代码量增加。所以后面实现篇更倾向于选择■ Collider(碰撞器)来实现这一交互行为。