【Unity】制作交互门 (思路篇)

游戏引擎: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",通过检测玩家进出触发区域实现门的交互行为。
【Unity】制作交互门 (思路篇)_第1张图片
优点
  可拓展性:当玩家进入检测区域后,我们可拓展检测之后的反馈效果。
   - 直接执行门的开关交互。
   - 添加交互按键E,增加玩家开门需求条件。
   - 添加开门前提条件。 例如:需要玩家拥有某种特定物品、玩家必须为某一角色等。

   特别注意:这里的添加开门前提条件主要是写在身上。

关联UnityAPI 【C#语言】 有:

UnityAPI 说明
OnTriggerEnter 进入触发器 仅执行一次
OnTriggerStay 在触发器内 每帧执行一次
OnTriggerExit 离开触发器 仅执行一次

  上述3种API方式在Unity中的实现玩家与场景的交互行为上的使用频率较高。当然,并不仅限于通过这3种方法。Trigger(触发器) 在Unity中并没有作为组件出现,而是在Collider(碰撞器)中担任一功能出现。
  即:只要是Collider(碰撞器)且组件下的 “Is Trigger” 均勾上,都能在C#脚本语言中实现触发器。

常用基本Collider(碰撞器)

  ( 注意:以下组件均用于3D场景,2D场景均不适用。)
  BoxCollider(盒碰撞器)
【Unity】制作交互门 (思路篇)_第2张图片
  MeshCollider(网格碰撞器)
【Unity】制作交互门 (思路篇)_第3张图片
  SphereCollider(球形碰撞器)
【Unity】制作交互门 (思路篇)_第4张图片
  CapsuleCollider(胶囊碰撞器)
【Unity】制作交互门 (思路篇)_第5张图片

  注:Add Component中,搜索"Trigger"会显示 ■Event Trigger(事件触发器),其不是文章提及的 Trigger

二、利用■ Raycast(射线)的实现逻辑

  以玩家自身为对象,由玩家身上的■ Camera(相机)发射■ Raycast(射线),根据■ RaycastHit(射线碰撞点)是否为门,进而实现门的交互。
【Unity】制作交互门 (思路篇)_第6张图片
优点
  可拓展性:【同上】
   - 直接执行门的开关交互。
   - 添加交互按键E,增加玩家开门需求条件。
   - 添加开门前提条件。 例如:需要玩家拥有某种特定物品、玩家必须为某一角色等。

   特别注意:这里的添加开门前提条件主要是写在玩家身上。

关联UnityAPI【C#语言】有:

UnityAPI 说明
Physics类 全局物理属性和物理方法
Raycast 投射光线,从点开始向一个方向投射一定长度,与有碰撞器的物体相撞
RaycastHit 返回射线碰撞信息(需要对象有碰撞器)

小结

  无论是Collider(碰撞器)还是■ Raycast(射线)均可实现门的交互行为。从笔者角度,在实现角色的一些交互行为上更偏向于使用Collider(碰撞器)来实现一些交互行为,不用强加于玩家身上的交互脚本上因为交互内容增多而导致代码量增加。所以后面实现篇更倾向于选择Collider(碰撞器)来实现这一交互行为。

你可能感兴趣的:(Unity,案例功能实现,游戏)