使用统一 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;
}
}