Unity3.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;
}
}