【问题标题】:unity - detect gameobjects that is already in contactunity - 检测已经接触的游戏对象
【发布时间】:2013-12-30 11:19:13
【问题描述】:

想象一下我有 2 个gameobjects、红盘子和苹果。 当游戏开始时(这很关键),苹果已经在红盘上(2gameobjects已经联系上了)。所以如果我移动红盘,苹果就会被“父”到红盘并跟随变换。

如何在Unity3D 中做到这一点?我看代码TriggerCollision,它们都需要至少一个阶段,1 移动gameobject 来碰撞另一个,我没有。

知道如何处理这个问题吗?

【问题讨论】:

  • 会不会出现红盘不随苹果移动的游戏状态?
  • @HappyApple 有,因此我有这种情况需要解决。 :)

标签: unity3d collision eventtrigger


【解决方案1】:

可能最简单的实现是使用OnTriggerEnterOnTriggerExit 将一个对象的变换的父级切换到另一个,这样父级的所有子级都将接受在父级上执行的变换操作。

示例:

using UnityEngine;

[RequireComponent(typeof(BoxCollider))]
[RequireComponent(typeof(Rigidbody))]

public class
    PlateCollider : MonoBehaviour
{
    private void
        Awake()
    {
        rigidbody.isKinematic = false;
        rigidbody.useGravity = false;
        collider.isTrigger = false;
    }
}

using UnityEngine;

[RequireComponent(typeof(SphereCollider))]
[RequireComponent(typeof(Rigidbody))]

public class 
    AppleCollider : MonoBehaviour 
{
    private void
        Awake()
    {
        rigidbody.isKinematic = false;
        rigidbody.useGravity = false;
        collider.isTrigger = false;
    }

    private void
        OnCollisionEnter(Collision collision)
    {
        PlateCollider tryGetPlate = collision.gameObject.GetComponent<PlateCollider>();

        if (tryGetPlate != null)
        {
            transform.parent = tryGetPlate.gameObject.transform;
        }
    }

    private void
        OnCollisionExit(Collision collision)
    {
        PlateCollider tryGetPlate = collision.gameObject.GetComponent<PlateCollider>();

        if (tryGetPlate != null)
        {
            transform.parent = null;
        }
    }
}

您可以使用许多其他方法来比较这两个对象。在此示例中,我尝试获取碰撞游戏对象上的组件并检查组件引用是否存在。碰撞标签对您来说可能是更好的选择,也可能不是。

【讨论】:

    【解决方案2】:

    我找到了解决方案:Bounds.Intersect

    如:

    var bounds1 = gameObject1.renderer.bounds;
    
    var bounds2 = gameObject2.renderer.bounds;
    
    
    
    if (bounds1.Intersects(bounds2))
    
    {
    
        // do something
    
    }
    

    这样,我的问题就解决了。

    【讨论】:

    • 非常感谢! :D 我更喜欢 gameObject1.collider.bounds,让它独立于图形(至少我认为是)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2017-12-13
    • 2016-01-28
    相关资源
    最近更新 更多