想象一下,我有2个gameobjects
,红色的盘子和苹果。
当比赛开始时(这是至关重要的),苹果已经在红盘上(2 gameobjects
已经联系)。所以,如果我移动红板,那么苹果就会成为红板的“父母”并跟随变换。
我如何在Unity3D
中执行此操作?我看一下代码Trigger
和Collision
,它们都至少需要一个1移动gameobject
来碰撞另一个的阶段,我没有这个阶段。
知道怎么处理这个吗?
答案 0 :(得分:6)
我找到了解决方案:Bounds.Intersect
如:
var bounds1 = gameObject1.renderer.bounds;
var bounds2 = gameObject2.renderer.bounds;
if (bounds1.Intersects(bounds2))
{
// do something
}
因此,我的问题解决了。
答案 1 :(得分:0)
最简单的实现可能是使用OnTriggerEnter和OnTriggerExit将一个对象的变换的父变换切换到另一个变换,这样父变量的所有子项都将接受对父变换执行的变换操作。 / p>
示例:强>
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;
}
}
}
您还可以使用许多其他方法来比较这两个对象。在这个例子中,我尝试在碰撞的游戏对象上获取组件并检查组件引用是否存在。碰撞标签可能是一个更好的选择,它可能不是。