【发布时间】:2012-04-06 13:49:50
【问题描述】:
使用 Unity 3.3。 visual studio express 2010. 和 c#.
我需要制作一个附加到对象的脚本。 该对象将创建自己的重力场,将吸引-排斥环境中的所有对象。
不幸的是,由于统一物理,我不确定如何做到这一点。我需要该对象覆盖所有其他对象吗?我要超越统一的主要物理学吗?这是怎么回事? 或者当它是一个简单的脚本时,我是否过于复杂?
不,我不想添加一个刚体,所以物体会随着重力下落,它必须创建更强大的重力。
干杯
更新!
public float radius = 5.0f;
public float power = -20f;
void Start ()
{
//GameObject gravityObject = GameObject.FindGameObjectWithTag("GravitySwell");
//gravSlime = gravityObject.transform;
}
void Update ()
{
Vector3 explosionPos = transform.position;
Collider[] colliders = Physics.OverlapSphere(explosionPos, radius, 3);
foreach (Collider hit in colliders)
{
if (!hit)
{
continue;
}
if (hit.rigidbody)
{
hit.rigidbody.AddExplosionForce(power, explosionPos, radius, 3);
}
}
}
}
这是因为它增加了吸引物体的负力。 问题是当这个脚本被分配到的有吸引力的对象在半空中时。任何被抓住的物体都会飞向它,但随后似乎又掉下来又被吸引了。 关于原因的任何提示?
我在想这样的事情,但什么也没发生:
Vector3 direction = this.transform.position - hit.transform.position;
direction.Normalize();
//hit.rigidbody.AddExplosionForce(power, explosionPos, radius, 3);
//hit.transform.position.;
hit.rigidbody.isKinematic = false;
hit.rigidbody.AddForce(direction);
更新:: 好的,我正在尝试这个,它似乎运作良好,但它附着在被吸引的物体上。我还希望有人有更好的主意吗?
public void OnCollisionEnter(Collision col)
{
if(col.gameObject.tag == "GravitySwell")
{
Debug.Log("i hit it!!!");
rigidbody.velocity = Vector3.zero;
}
}
【问题讨论】:
-
k 如果我将重力从刚体上移开,这会起作用,但它看起来真的很垃圾。它太慢了,当物体撞击重力物体的表面时,它的速度就像它应该携带的那样,但它最终会反弹。有什么方法可以让它更快地移动并粘在物体上而不使其位置=重力物体的位置?