ユニティ3.3を使用する。ビジュアルスタジオエクスプレス2010とC#。ユニティ3.3、オブジェクトにローカル重力を作成する
オブジェクトに添付されるスクリプトを作成する必要があります。 このオブジェクトは、環境内のすべてのオブジェクトを引き付ける独自の重力フィールドを作成します。
残念ながら、私はユニティスフィジックスのためにこれを行う方法がわかりません。他のすべてのオブジェクトを上書きするオブジェクトが必要でしょうか?私は団結の主な物理を上回るのですか?この作品は何ですか? または、単純なスクリプトのときには、私はものをオーバーコンプリートしていますか?
いいえ私はオブジェクトが重力に落ちるようにリジグ本体を追加したくないので、はるかに強力な重力を作成する必要があります。
乾杯
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);
はUPDATE :: 私はこれをしようとしていた[OK]を、そのはうまく動作するようですが、その吸引されているオブジェクトに添付します。また、誰かがより良いアイデアを持っていればと思っていましたか?あなたは何ができるか
public void OnCollisionEnter(Collision col)
{
if(col.gameObject.tag == "GravitySwell")
{
Debug.Log("i hit it!!!");
rigidbody.velocity = Vector3.zero;
}
}
k剛体から重力を回すが、これは本当にうんざりするように見えます。その速度が遅すぎると、オブジェクトが重力オブジェクトの表面に当たったときに、その速度が運ばなければならないようになりますが、バウンスが終了します。重力オブジェクトの位置を決めることなく、オブジェクトをより速く動かすことができます。 – lemunk