c# - 如何设置 2D Colliders 和 Rigibody2D?
问题描述
我是 C# 和 Unity 的新手,所以请多多包涵。我如何检查是否有东西与跳跃垫发生碰撞,并且碰撞的对象具有 rigibody2D,以便我可以操纵对象 rigibody2d velocity.y?我查看了文档,但我仍然不明白。我在 Jump Pad 中有一个 rigibody2d Body 类型;动态,Box Collider2D 是触发器;选中,并且在我的 Box/Crate 中与 Jump Pad 相同,只有 Box Collider2D 是触发器;没有检查。这有效,但它仅适用于一个板条箱/盒子我正在寻找一种方法来检查是否有任何带有 rigibody2d 的游戏对象发生碰撞,如果是,它应该在跳跃垫上“跳跃/反弹”。
public class JumpPad : MonoBehaviour
{
private GameObject _gameObject;
private Rigidbody2D _rigibody2d;
void OnTriggerEnter2D(Collider2D collider)
{
_gameObject = GameObject.FindGameObjectWithTag("Crate");
_rigibody2d = _gameObject.GetComponent<Rigidbody2D>();
_rigibody2d.velocity = new Vector2(0, 22f);
}
任何帮助表示赞赏。感谢您的时间。
解决方案
对于此类情况,您可以使用该OnCollisionEnter
方法。
https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
AudioSource audioSource;
void Start()
{
audioSource = GetComponent<AudioSource>();
}
void OnCollisionEnter(Collision collision)
{
foreach (ContactPoint contact in collision.contacts)
{
Debug.DrawRay(contact.point, contact.normal, Color.white);
}
if (collision.relativeVelocity.magnitude > 2)
audioSource.Play();
}
}
当然也有设置OnTriggerEnter
为的对撞机:IsTrigger
true
https://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html
仔细检查文档以了解差异以及哪一个适用于您的案例。
在您的情况下,我认为您需要以下内容:
public class JumpPad : MonoBehaviour
{
private GameObject _gameObject;
private Rigidbody2D _rigibody2d;
void OnTriggerEnter2D(Collider2D col)
{
var colliderHasTag = col.gameObject.tag == "crate";
if(!colliderHasTag)
return;
var rb = col.gameObject.GetComponent<Rigidbody2D>();
rb.velocity = new Vector2(0, 22f);
}
这个想法是,当发生碰撞时,你检查你正在碰撞的对象。然后,如果它具有某些参数(例如标签“板条箱”),则应用您的操作(例如添加一堆力)。
推荐阅读
- android - Oreo - 无法通过 WebView 中的 setUserAgentString 设置新值
- javascript - React.JS:检测键盘输入是否来自条形码扫描仪
- javascript - 如何检查属性是否仅属于Javascript中的子类或子类?
- javascript - 访问 WebSocket 时出现 InvalidStateError
- neural-network - 多变量和多序列 LSTM
- jenkins - Jenkins 电子邮件中没有附件
- angular - Bootstrap 不适用于我的 Angular 项目
- c# - C# .net Core 调用 Oracle 函数错误不是有效月份
- authentication - Radius 客户端和 Radius 服务器之间的 SSL 相互验证
- javascript - 在 Highchart 上将 X 轴显示为 DD/MM/YY HH:MM:SS.mm