虚幻4 碰撞过滤

原创翻译,转载请注明出处。(http://blog.csdn.net/sinat_24229853/article/details/51090259)
英文原文:https://www.unrealengine.com/blog/collision-filtering?lang=zh-CN

选择什么样的碰撞显然是很重要的。但它可能会很棘手,而且我们在开发虚幻4的过程中已经花了相当长的时间讨论。我们的系统能够一眼看上去有点复杂,但它是很强大和一致的,所以我想给一点背景知识关于怎样完毕它。

我们会谈论碰撞的不同反应,我们怎样使用通道来过滤碰撞,和勾勒出简单和复杂碰撞体之间的不同。

堵塞(Blocking)、重叠(Overlapping)和忽略(Ignoring)
首先你要知道的是。当你谈论一些事应该发生碰撞,你必须选择能否够穿透(penetrate)它。

一面砖墙会堵塞一个玩家,但一个触发器(trigger)会使它们重叠,同意它们重叠。它们都会产生一个事件(在UE4中的术语分别为击中(Hit)或重叠(Overlap)),只是这是一个重要的区别。而其他对象能够忽略互相碰撞。这给了我们三种不同的碰撞类型。

追踪通道和对象通道
下一个大问题碰撞过滤的核心:“该选择谁?”是物体决定了什么类型的查询来碰撞?还是查询决定了查找什么类型的对象?在不同的情况下,它们都是合理的,所以UE4都支持!

想象一下我们在我们的游戏中定义了两个“追踪通道”。一个是“可见性”,一个是“武器”查询。一面砖墙是用来堵塞它们。一个灌木堵塞“可见性”可是不堵塞“武器”,一个防弹玻璃堵塞“武器”可是不堵塞“可见性”。当你做这样的查询。你指定了单个追踪通道。

这里写图片描写叙述

假设我们对此改变了,因此游戏代码必须知道什么对象类型用来查询,我们游戏可能须要大量的不同类型来处理全部这些场景!它也同意我们之后在内容做“现场修复”,而不是改动调用代码本身和破坏其他的东西。

然而有一些情况下。你想做只基于它们类型的对象查询,这就是我们用的对象通道。一个样例是一个爆炸发生。你想高速查找在一定半径内的“Pawn”或“PhysicsBody”类型的全部对象。

当你做这样的类型的查询时,你能够指定多对象通道。

UE4有一些“内置”追踪通道(可见性,摄像机)和对象通道(世界静态、世界动态、Pawn、PhysicsBody、Vehicle、可破坏),可是你能够简单地通过编辑->项目设置->碰撞加入你自己的通道。虽然你被限制在32个通道总数内。

运动对象间的碰撞
当你想处理移动对象的时候,事情变得有一点复杂。由于这里有许多种组合。在UE4。每一个对象知道它自己的对象通道。加入一个列表关于怎样响应其他对象通道。当两个物体相交。我们着眼于他们怎样互相响应,和採取最小堵塞(least blocking)交互,例如以下图所看到的:

这里写图片描写叙述

所以想象以下的场景:

这里写图片描写叙述

如今这个角色向前移动。

首先它会与灌木丛(Shrub)重叠。玩家是Pawn类型,而且灌木丛想要与它重叠。Shrub是世界静态(WorldStatic)类型,而且玩家想要堵塞它。检查上面那个表格。终于的结果是重叠!相同的,砖墙和玩家都想堵塞对方。所以玩家走过灌木丛(产生重叠事件)和它会被墙截停(产生击中事件)。

这里写图片描写叙述

假设你有两个玩家。而且一个想变成“幽灵”,你能够让它到Pawn的响应频道从Block改为Ignore。然后他会穿透其他玩家。

碰撞预设
虽然这个系统给了大量控制关于你的场景中的对象怎样与其他对象碰撞,实际上大多数对象在使用共同的配置。为了让事情更简单,UE4有一个“碰撞预设”系统。每一个预设包括了一个对象类型,和在你的游戏中的对于每一个追踪和对象通道的一个响应。

当你选择场景中的一个对象,你会看到一个简单的下拉菜单,同意你选择一个预设:

这里写图片描写叙述

UE4有几种内置通道(比如不可见墙,物理Actor等等),而且你能够在项目设置创建自己的通道。假设你不想使用预设,你能够选择“自己定义…”然后你能够改动每一个响应。像我们例如以下谈论的:

这里写图片描写叙述

简单和复杂碰撞
最后一件事要理解的是:UE4中的每一个对象都有“复杂”和“简单”碰撞表示。复杂的碰撞指使用实际的渲染几何体碰撞。

这对于武器追踪来说是最实用的东西。你能够射击你能看得到的东西。虽然你不总是想要碰撞这个,而且每一个网格也能够有简单碰撞表现。其由球体、盒子、胶囊体和凸外壳集合组成。当你运行碰撞查询,你告诉UE4你想要碰撞的几何体。比如,角色移动,使用简单几何体碰撞。来避免在细节上的卡住。

编辑器那里有一个方便的查看模式,让你看见作为一个角色会碰撞的东西:

这里写图片描写叙述

这里写图片描写叙述

总结
这里已经是全部内容。碰撞过滤是一个令人沉醉的世界!我希望它有助于了解一些我们试图解决和怎样利用它来用到你自己的游戏中。有不论什么疑问或评论?我们总是在论坛或者你能够在推特联系我@EpicJamesG。

*我们实际上在第一个堵塞碰撞发生后停止继续查找碰撞。这是一个很好的性能优化——想象开了一枪范围可达1km的子弹打中了距离你1m的墙,我们省去了999米的工作!

转载于:https://www.cnblogs.com/clnchanpin/p/7236468.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客?

前言OK,我也来造轮子了博客系统从一开始用WordPress,再到后来用hexo、hugo之类的静态博客生成放github托管,一直在折腾折腾是为了更好解决问题,最终还是打算自己花时间搞一个好了本系列文章将记录博客的开发过程~ 将会持续更新&am…

linux之dig命令

1 dig命令的作用 一般我们可以用dig命令解析域名成ip,或者把ip解析成域名,或查看这个域名所经过的域名服务器,这点是 nslookup命令没有的功能. DNSpod:注册域名,首先得找到域名注册商,国内的比较著名的有DNSpod 2 一般使用 1) 解析域名成ip dig 域名 这里测试 dig ww…

Diocp截图

跑了个数据库的查询和插入,删除。 Http SVR DEMO http://123.232.98.202:8081/

C#中泛型在Class上的实现

using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace ConsoleApplication1 {class Program{static void Main(string[] args){GenericArray<int> intArray = new GenericArray<int>(5);//实例化一个泛型的数组for (i…

mysql与oracle在软件测试_Oracle和MySQL的一些简单命令对比

SQL> select to_char(sysdate,yyyy-mm-dd) from dual;SQL> select to_char(sysdate,hh24-mi-ss) from dual;mysql> select date_format(now(),%Y-%m-%d);mysql> select time_format(now(),%H-%i-%S);日期函数增加一个月&#xff1a;SQL> select to_char(add_mon…

【C语言简单说】五:常用运算符

其实。。。这一节我我猜大家几分钟就会了&#xff08;&#xff09;…(⊙_⊙;)… ○圭~○列~~怎麼酱&#xff1f; 因为我相信大家的智商&#xff0c;我就随便给大家提一下就好了。我们看以下的代码&#xff1a; #include<stdio.h> #include<stdlib.h> int main(){…

关系型数据库

1、关系型数据库 关系型数据库&#xff1a;是一种建立在关系模型&#xff08;数学模型&#xff09;上的数据库。 关系模型&#xff1a;一种所谓建立在关系上的模型。关系模型包含三个方面&#xff1a; 数据&#xff1a;数据存储的问题&#xff0c;二维表&#xff08;有行和列&a…

python中lines是什么类型_Python中splitlines()方法的使用简介

splitlines()方法返回一个字符串的所有行&#xff0c;可选包括换行符列表(如果num提供&#xff0c;则为true) 语法 以下是splitlines()方法的语法&#xff1a; str.splitlines( numstring.count(\n)) 参数 num -- 这是任何数&#xff0c;如果存在它会被认为换行需要被包括行数。…

关于Unity中的本地存储

本地存储 在做游戏的时候&#xff0c;经常需要在本机存储一些数据&#xff0c;比如闯关类游戏要记录闯到第几关&#xff0c;做单机的时候要把数据保存到本地&#xff0c;下次启动的时候数据存在&#xff0c;就是把数据保存到磁盘里面或者手机的flash闪存里面。 Unity使用Player…

linux之history和!命令联合使用

1 问题 linux平台查找过去的使用的命令 2 解决方法 1&#xff09;history和! id联合使用 输入histroy命令&#xff0c;部分 显示如下 2008 echo 11 > 1.txt 2009 histroy 然后!id &#xff01;2008 echo 11 > 1.txt 如果&#xff01;&#xff08;命令的一部分&am…

sql 注入神器sqlmap 源码分析之调试sqlmap

为什么80%的码农都做不了架构师&#xff1f;>>> 相信大家平时 用sqlmap 命令&#xff0c;比如 python sqlmap.py -u"https://team.oschina.net/action/team/create" --data"nameonlyGuest&identonlyGuest&sidentonlyGuest&temp1431349…

【鉴权/授权】自定义一个身份认证Handler

微信公众号&#xff1a;趣编程ACE关注可了解.NET日常开发技巧。如需源码&#xff0c;请公众号留言 [源码];上文回顾【鉴权/授权】一步一步实现一个简易JWT鉴权自定义身份验证CustomerAuthenticationHandler使用上篇文章我演示了如何利用.net core 里面内置的验证方案-Bearer 进…

java把对象转成json_java 把对象 对象转换成json字符串 | 学步园

publicclassJSONCreateDemoActivity {//创建以下的JSON对象publicString createJSONObject() {Gsongson newGson();Configurationcon1 newConfiguration();con1.setDisplay(true);con1.setFillColor("#FF0000");con1.setID(1);con1.setLineColor("#FF0000&quo…

【C语言简单说】六:取模运算符以及变量的扩展

┴┴ &#xff08;╰(&#xff40;□′)╯&#xff08; ┴┴ … 这一节我们就来说另外的运算符——取模运算符&#xff08;说白了跟取余数差不多…&#xff1c;—_-)&#xff01;&#xff01;&#xff01;&#xff09; 先看看好难懂的定义&#xff1a;取模运算和取余运算两个…

Android Studio开发基础之Activity之间参数传递

一、简单数值传递 1、MainActivity protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {@Overridepublic void o…

ExtJs5.0在WebStorm上的使用之入门教程(一)编写第一个网页 HelloExt

首先&#xff0c;必须声明一下笔者使用的软件版本&#xff1a; 前端开发工具&#xff1a;WebStorm 11.0.3 辅助插件&#xff1a;ext-5.0.0-gpl 以上工具包括下面的代码我已经打包上传在此处了&#xff1a;点击打开链接 先上代码&#xff0c;再废话&#xff1a;<!DOCTYPE htm…

python赋值语句的一般格式为_[零基础学Python]赋值,简单也不简单

变量命名在《初识永远强大的函数》一文中&#xff0c;有一节专门讨论“取名字的学问”&#xff0c;就是有关变量名称的问题&#xff0c;本温故而知新的原则&#xff0c;这里要复习&#xff1a;名称格式&#xff1a;(下划线或者字母)(任意数目的字母&#xff0c;数字或下划线)注…

linux之下载文件或测试网络常用命令(curl和wget)

1 问题 在自己的设备上测试网络 2 解决办法 1)使用wget命令(主要用来下载文件或测试网络) 一般用使用 wget www.baidu.com 效果如下: wget www.baidu.com --2018-12-04 23:48:23-- http://www.baidu.com/ Resolving www.baidu.com (www.baidu.com)... 14.215.177.38, 14…

腾讯视频涨价:一年多赚74亿!关注我领取腾讯VIP会员,周卡低至7元

不久前&#xff0c;腾讯视频的用户又一次“喜迎会员价格上涨”&#xff0c;甚至让腾讯视频因此登上了微博热搜。但要知道的是&#xff0c;此前在去年4月的时候&#xff0c;腾讯视频就已经涨过一次价了。4月9日&#xff0c;腾讯视频方面发布通知称&#xff0c;将于4月20日零点调…

RAID 01 和RAID 10的区别

之前没搞明白&#xff0c;今天看了篇文章&#xff0c;终于清楚了。RAID 01 就是先做RAID 0磁盘组&#xff0c;再2组RAID 0做成RAID 1。这种情况下&#xff0c;RAID 1 的其中一个镜像 RAID 0中,有一块盘坏掉,RAID 1 的其中一个镜像就全坏了。RAID 10,就是先做1&#xff0c;再2组…