- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
总结如下:我想从 OnTriggerEnter2D 事件中找到参与碰撞的两个对撞机。我该怎么做?
我有两个游戏对象。两者都有一个碰撞器和一个触发器。
在对象 A 上,它被触发器包围。在对象 B 上,触发器仅围绕特定部分。
当对象 A 的触发器接触到对象 B 的任何碰撞器(无论是否触发)时:我希望对象 B 失去健康。反之亦然。
但是,当对象 A 的触发器接触到对象 B 的碰撞器(而非触发器)时,两个对象都会失去生命值。
我在控制台中得到了这个
Object A hit Object B
Object B hit Object A
我得出结论,对象 A 的触发器正在调用对象 B 的 Ontrigger2d 事件。
我认为解决这个问题的最好方法是找到哪个对撞机“发现”了碰撞,并据此:忽略碰撞..
如何找到哪个触发器“发现”了碰撞?
[也在 Unity 论坛上发布]
编辑:代码
private void OnTriggerEnter2D(Collider2D collision)
{
Consumeable con = collision.GetComponentInParent<Consumable>();
if (con != null && con.gameObject != gameObject)
{
Debug.Log(gameObject.name + " hit " + con.gameObject.name);
con.Damage(1);
}
}
最佳答案
To sum it up, I want to find both colliders involved in a collision
当您的脚本继承自 MonoBehaviour
时,会声明一个 gameObject
变量。这个变量指的是这个脚本附加到的游戏对象。您可以使用该 gameObject
变量获取一个 GameObject,并从 OnTriggerEnter
函数中的 Collider2D
参数获取另一个。
void OnTriggerEnter2D(Collider2D collision)
{
GameObject obj1 = this.gameObject;
GameObject obj2 = collision.gameObject;
Debug.Log("Triggered Obj1: :" + obj1.name);
Debug.Log("Triggered obj2: :" + obj2.name);
}
编辑:
The objects are useless to me. I need the colliders. And no, I can't use 'getcomponent' because they have more than one collider, and I need only the ones in the collision
碰撞器应该成为 GameObject 的子对象,并且脚本必须附加到每个子碰撞器,然后这个答案中的内容应该起作用。
如果出于某种原因您必须在不使碰撞器成为该游戏对象的子对象的情况下执行此操作,则使用 bool 变量仅检测碰撞一次。
这是对来自 this 的答案的修改发布。
有一个名为 theOtherCollider
的本地 Collider2D
变量来存储调用 OnTriggerEnter2D
时首先报告的碰撞数据然后有另一个 bool 值
名为 detectedBefore
的变量以确定之前是否调用过 OnTriggerEnter2D
。
调用 OnTriggerEnter2D
时,检查 boolean
变量的 local/this 版本是否为 false
。如果它不是 true
,那么这是第一次调用 OnTriggerEnter2D
。使用 GetComponent
获取其他脚本,然后将 other 脚本的 boolean
变量设置为 true
。同时,还使用 OnTriggerEnter2D
中的 Collider2D
值初始化 other 脚本上的 theOtherCollider
变量功能。
现在,如果 OnTriggerEnter2D
被调用并且 boolean
变量的 local/this 版本为 true
,将其设置为 false
以重置它,然后使用 theOtherCollider
变量和 OnTriggerEnter2D
函数中的 Collider2D
变量获取碰撞器.
这可能会造成混淆,但通过查看代码,更容易理解。
注意:
YOURSCRIPT
是 OnTriggerEnter2D
函数所在的脚本名称,它附加到 Colliders。您必须将其更改为该脚本的任何名称。
public bool detectedBefore = false;
public Collider2D theOtherCollider;
void OnTriggerEnter2D(Collider2D collision)
{
//Get both colliders then exit if we have already ran this code below
if (detectedBefore)
{
//Reset
detectedBefore = false;
//Get both Colliders once below
Collider2D col1 = theOtherCollider;
Collider2D col2 = collision;
Debug.Log("Triggered Obj1: " + col1.name);
Debug.Log("Triggered obj2: " + col2.name);
return; //EXIT the function
}
//Set the other detectedBefore variable to true then set get the first Collider
YOURSCRIPT myScript = collision.gameObject.GetComponent<YOURSCRIPT>();
if (myScript)
{
myScript.detectedBefore = true;
myScript.theOtherCollider = collision;
}
}
关于c# - 使用多个碰撞器查找参与 GameObject 碰撞的两个碰撞器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50658748/
我之前让 dll 注入(inject)器变得简单,但我有 Windows 7,我用 C# 和 C++ 做了它,它工作得很好!但是现在当我在 Windows 8 中尝试相同的代码时,它似乎没有以正确的方
我正在尝试制作一个名为 core-splitter 的元素,该元素在 1.0 中已弃用,因为它在我们的项目中起着关键作用。 如果您不知道 core-splitter 的作用,我可以提供一个简短的描述。
我有几个不同的蜘蛛,想一次运行所有它们。基于 this和 this ,我可以在同一个进程中运行多个蜘蛛。但是,我不知道如何设计一个信号系统来在所有蜘蛛都完成后停止 react 器。 我试过了: cra
有没有办法在达到特定条件时停止扭曲 react 器。例如,如果一个变量被设置为某个值,那么 react 器应该停止吗? 最佳答案 理想情况下,您不会将变量设置为一个值并停止 react 器,而是调用
https://code.angularjs.org/1.0.0rc9/angular-1.0.0rc9.js 上面的链接定义了外部js文件,我不知道Angular-1.0.0rc9.js的注入(in
我正在尝试运行一个函数并将服务注入(inject)其中。我认为这可以使用 $injector 轻松完成.所以我尝试了以下(简化示例): angular.injector().invoke( [ "$q
在 google Guice 中,我可以使用函数 createInjector 创建基于多个模块的注入(inject)器。 因为我使用 GWT.create 在 GoogleGin 中实例化注入(in
我在 ASP.NET Core 1.1 解决方案中使用配置绑定(bind)。基本上,我在“ConfigureServices Startup”部分中有一些用于绑定(bind)的简单代码,如下所示: s
我在 Spring MVC 中设置 initBinder 时遇到一些问题。我有一个 ModelAttribute,它有一个有时会显示的字段。 public class Model { privat
我正在尝试通过jquery post发布knockoutjs View 模型 var $form = $('#barcodeTemplate form'); var data = ko.toJS(vm
如何为包含多态对象集合的复杂模型编写自定义模型绑定(bind)程序? 我有下一个模型结构: public class CustomAttributeValueViewModel { publi
您好,我正在尝试实现我在 this article 中找到的扩展方法对于简单的注入(inject)器,因为它不支持开箱即用的特定构造函数的注册。 根据这篇文章,我需要用一个假的委托(delegate)
你好,我想自动注册我的依赖项。 我现在拥有的是: public interface IRepository where T : class public interface IFolderReposi
我正在使用 Jasmine 测试一些 Angular.js 代码。为此,我需要一个 Angular 注入(inject)器: var injector = angular.injector(['ng'
我正在使用 Matlab 代码生成器。不可能包含代码风格指南。这就是为什么我正在寻找一个工具来“ reshape ”、重命名和重新格式化生成的代码,根据我的: 功能横幅约定 文件横幅约定 命名约定 等
这个问题在这里已经有了答案: Where and why do I have to put the "template" and "typename" keywords? (8 个答案) 关闭 8
我开发了一种工具,可以更改某些程序的外观。为此,我需要在某些进程中注入(inject)一个 dll。 现在我基本上使用这个 approach .问题通常是人们无法注入(inject) dll,因为他们
我想使用 swing、spring 和 hibernate 编写一个 java 应用程序。 我想使用数据绑定(bind)器用 bean 的值填充 gui,并且我还希望它反射(reflect) gui
我有这段代码,当两个蜘蛛完成后,程序仍在运行。 #!C:\Python27\python.exe from twisted.internet import reactor from scrapy.cr
要点是 Spring Batch (v2) 测试框架具有带有 @Autowired 注释的 JobLauncherTestUtils.setJob。我们的测试套件有多个 Job 类提供者。因为这个类不
我是一名优秀的程序员,十分优秀!