使用Unity 3.3。 Visual Studio Express 2010。和 C#。
我需要制作一个附加到对象的脚本。
该物体将创建自己的重力场,吸引-排斥环境中的所有物体。
不幸的是,由于统一物理学,我不确定如何做到这一点。我需要该对象来覆盖所有其他对象吗?我是否超越统一主要物理?这怎么样?
或者当它是一个简单的脚本时我是否使事情变得过于复杂?
不,我不想添加刚体,因此物体会因重力而下落,它必须创建更强大的重力。
Cheers
UPDATE!
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;
}
}