Unity游戏环境交互系统

概述

交互功能使用同一个按钮或按钮列表,在不同情况下显示不同的内容,按下执行不同的操作。

按选项个数分类

环境交互系统可分为两种,单选项交互,一般使用射线检测;多选项交互,一般使用范围检测。第一人称游戏单选多选都可以用,因为第一人称人物背对一个可交互对象时显示交互选项让玩家疑惑,所以第一人称使用射线检测或使用人物面前的触发器进行范围检测。第三人称因为人物一般在或者接近画面中心,基本上必须用以人物为中心的范围检测。

本质上,单选项交互让玩家通过转动视角选择交互选项,在可交互对象很密集的情景,玩家很难准确瞄准交互对象,但开发简单。多选项交互玩家选择想要的交互选项更容易,开发复杂。

按输入方式分类

电脑通过键盘按键(一般是F)交互,滑轮选选项;手机通过按屏幕交互,上下滑动选选项,这导致二者的实现方式又不一样。电脑通过InputManager或PlayerInput,手机通过按钮回调。就是说电脑上的多个选项可以只是Image,手机上的选项有Button。

环境交互系统由这几个部分构成:

  1. 环境检测;
  2. 交互类型判断;
  3. UI显示和回调添加;
  4. 执行;

对于玩家,他能直接感觉到的只有UI显示和按下执行,环境检测、根据类型判断UI显示的内容、根据类型判断执行的类型完全由程序完成,所以玩家感觉不到交互系统的复杂性。

数据结构

一个游戏的交互类型选项是确定的,有限的,适合用枚举表示。把游戏支持的所有交互类型定义为枚举的选项:

public enum ActionOption{
    None,TakeGun,SwapGun,TakeItem,Talk,CheckPack
}

如果是单选项交互,就声明一个交互枚举变量,如果是多选项交互,就声明一个交互枚举列表。

环境检测

环境交互函数通过射线检测或范围检测得到可交互对象。可交互对象可能是一个物品、一个NPC、一扇门,交互对象类型毫不相干,但是都有“可交互”的特征。这很符合接口的设计初衷,所以可以定义接口:

public interface Interactive
{
    public abstract void InterAct();
}

所有的可交互对象继承可交互接口。射线或范围检测只要在检测到的碰撞体上尝试获得接口,就能得到所有可交互对象。

if(Physics.Raycast(rayOrigin,rayVector,out raycastHit,10,interactionLayerMask)
        &&Vector3.Distance(player.transform.position,raycastHit.point)<interactionRange){
            if(raycastHit.collider.TryGetComponent(out interactive))
            {}
}

再把这个接口变量交给一个函数使用里氏转换判断它的具体类型 。

用滚轮改变选中的交互选项:

void Update(){
        GetScrollInput();
    }
    public void GetScrollInput(){
        float delta=Mouse.current.scroll.ReadValue().y;
        if(delta<0){
            selectedInteraction++;
        }
        else if(delta>0){
            selectedInteraction--;
        }
        selectedInteraction=Mathf.Clamp(
            selectedInteraction,0,actionOptions.Count-1);
        UpdateSelectedInteraction();
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/944221.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DVWA安装

这里讲的很清楚&#xff0c;如果是win10的话可能会出现端口80占用的情况&#xff0c; 使用管理员身份运行 cmdnet stop http //停止系统http服务sc config http start disabled //禁用服务的自动启动&#xff0c;此处注意等号后面的空格不可少

Oracle考试多少分算通过?

OCP和OCM认证的考试及格分数并不是固定的&#xff0c;而是根据考试的难度和考生的整体表现来确定。对于OCP认证&#xff0c;考生需要全面掌握考试要求的知识和技能&#xff0c;并在考试中表现出色才有可能通过。而对于OCM认证&#xff0c;考生则需要在每个模块中都达到一定的水…

18_HTML5 Web IndexedDB 数据库 --[HTML5 API 学习之旅]

HTML5 Web IndexedDB API 是一种在用户浏览器中存储大量结构化数据的机制&#xff0c;它允许存储和检索键值对&#xff0c;其中键可以是任何有效的JavaScript对象。IndexedDB 主要用于需要复杂查询的数据密集型Web应用。 IndexedDB 的特点&#xff1a; HTML5 Web IndexedDB A…

【Seata】分布式事务问题和理论基础

目录 1.分布式事务问题 1.1本地事务 1.2分布式事务 2.理论基础 2.1CAP定理 2.1.1一致性 2.1.2可用性 2.1.3分区容错 2.1.4矛盾 2.2BASE理论 2.3解决分布式事务的思路 1.分布式事务问题 1.1本地事务 本地事务&#xff0c;也就是传统的单机事务。在传统数据库事务中…

【数据库初阶】Linux中库的基础操作

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; 数据库初阶 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 亲爱的小伙伴们&#xff0c;大家好&#xff01;在这篇文章中&#xff0c;我们将深入浅出地为大家讲解 Linux…

数据结构与算法Python版 图

文章目录 一、图二、抽象数据类型图三、图的实现-邻接列表法 一、图 表示图的英文单词 painting&#xff1a;用画刷画的油画drawing&#xff1a;用硬笔画的素描/线条画picture&#xff1a;真实形象所反映的画&#xff0c;如照片等&#xff0c;如take pictureimage&#xff1a…

Word表格另起一页解决办法

Word表格另起一页解决办法 表格设置根据内容自动调整&#xff0c;取消指定高度第1步 第2步

Python数据可视化案例——折线图

目录 json介绍&#xff1a; Pyecharts介绍 安装pyecharts包? 构建一个基础的折线图 配置全局配置项 综合案例&#xff1a; 使用工具对数据进行查看?&#xff1a; 数据处理 json介绍&#xff1a; json是一种轻量级的数据交互格式&#xff0c;采用完全独立于编程语言的…

【Seata】seata的部署和集成

一、部署Seata的tc-server 1.下载 首先我们要下载seata-server包&#xff0c;地址在http://seata.io/zh-cn/blog/download.html 当然&#xff0c;课前资料也准备好了&#xff1a; 2.解压 在非中文目录解压缩这个zip包&#xff0c;其目录结构如下&#xff1a; 3.修改配置 修…

链表 之 无头结点【哨兵位】单向非循环链表【单链表】增删改查 等方法

系列文章目录 &#x1f388; &#x1f388; 我的CSDN主页:OTWOL的主页&#xff0c;欢迎&#xff01;&#xff01;&#xff01;&#x1f44b;&#x1f3fc;&#x1f44b;&#x1f3fc; &#x1f389;&#x1f389;我的C语言初阶合集&#xff1a;C语言初阶合集&#xff0c;希望能…

GCP Cloud Architect exam - PASS

备考指南 推荐视频课程 https://www.udemy.com/course/google-cloud-architect-certifications/?couponCodeKEEPLEARNING 推荐题库 https://www.udemy.com/course/gcp-professional-cloud-architect-exam-practice-tests-2024​/?couponCodeKEEPLEARNING 错题集 http…

CCF-GESP 等级考试 2023年12月认证C++二级真题解析

2023年12月真题 一、单选题&#xff08;每题2分&#xff0c;共30分&#xff09; 正确答案&#xff1a;C 考察知识点&#xff1a;变量的定义与使用 解析&#xff1a;变量命名规则&#xff1a;1、只能包括数字、字母和下划线&#xff1b;2、不能以数字开头&#xff1b;3、不能和…

5.学习webpack配置 babel基本配置

babel是一个javascript编译工具&#xff0c;其主要功能是将新版本的JavaScript代码&#xff08;如es6&#xff09;转换为旧版本的代码&#xff08;如es5&#xff09;&#xff0c;以便能够在旧版本的浏览器或环境中运行。一般配合webpack使用。 使用npm i -D babel/core babel/p…

配置搜索无人机

升级ubuntu内核 https://www.bilibili.com/video/BV11X4y1h7qN/?spm_id_from333.337.search-card.all.click 进入四个内核文件并安装 sudo dpkg -i *.deb安装ROS&#xff0c;PX4&#xff0c;XTDrone&#xff0c;QGC https://blog.csdn.net/qq_45493236/article/details/13…

Linux内核蓝牙子系统有什么(9)

接前一篇文章&#xff1a;Linux内核蓝牙子系统有什么&#xff08;8&#xff09; 本文内容参考&#xff1a; Linux之蓝牙相关代码浅析 | DDNotes 蓝牙驱动相关代码_蓝牙驱动代码-CSDN博客 linux蓝牙驱动代码阅读笔记_bt-sco.c-CSDN博客 Linux内核的蓝牙子系统架构-CSDN博客 …

22. 仿LISP运算

题目描述 LISP语言唯一的语法就是括号要配对 形如(OP P1 P2 ...)&#xff0c;括号内元素由单个空格分割。其中第一个元素OP为操作符&#xff0c;后续元素均为其参数&#xff0c;参数个数取决于操作符类型。注意:参数P1,P2也有可能是另外一个嵌套的(OP P1 P2...)&#xff0c;当前…

Axure10

如果还是不行就将字体图标安装在控制面板–字体下 打开原型了之后&#xff0c;icon没有 一定要将字体库放到–》控制面板\外观和个性化\字体 里面

王佩丰24节Excel学习笔记——第十九讲:Indirect函数

【以 Excel2010 系列学习&#xff0c;用 Office LTSC 专业增强版 2021 实践】 【本章技巧】 如果indirect引用出错&#xff0c;首先检查一下引用位置的双引号有没有出错&#xff0c;再检查引用值的位置是否出错&#xff0c;如果是双引号出错&#xff0c;可以使用英文状态下输入…

基于 Ragflow 搭建知识库-初步实践

基于 Ragflow 搭建知识库-初步实践 一、简介 Ragflow 是一个强大的工具&#xff0c;可用于构建知识库&#xff0c;实现高效的知识检索和查询功能。本文介绍如何利用 Ragflow 搭建知识库&#xff0c;包括环境准备、安装步骤、配置过程以及基本使用方法。 二、环境准备 硬件要…

Structured-Streaming初识

一、概览 Structured Streaming是一个基于SparkSQL引擎构建的可扩展且容错的流处理引擎。可以像在静态数据上表达批量计算一样表达流计算。SparkSQL引擎将负责以增量方式连续运行它&#xff0c;并在流数据继续到达时更新最终结果。可以使用Scala、Java、Python或R中的Dataset/…