2012-04-06 5 views
2

ユニティ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; 
} 
} 
+0

k剛体から重力を回すが、これは本当にうんざりするように見えます。その速度が遅すぎると、オブジェクトが重力オブジェクトの表面に当たったときに、その速度が運ばなければならないようになりますが、バウンスが終了します。重力オブジェクトの位置を決めることなく、オブジェクトをより速く動かすことができます。 – lemunk

答えて

1

は団結がどのゲームオブジェクトに追加して、何がその衝突のボックスに入ったならば、あなたがチェックし、衝突されたオブジェクトに力を加えるための要素として持っていることを衝突ボックスを追加しています。必要に応じてサンプルコードを入手します。

//編集

スクリプトに独自の重力を追加し、それは方向に移動させるために力を加えるための独自の機能を持っていますが、ちょうどそう、あなたはどのくらいの重力RIDを変更することができます知ることができます。ボディは

を行いますが、あなたがあなた自身の重力を行いたい場合は行うことができます

bool grounded = false; 

void gravity(){ 

    gameObject.trasform.position.x -= gravity 

} 

void onCollisionEnter(collision c){ 
    //check and see what you are colliding with and if its the ground then set grounded to true and that will get you falling gravity. there is more you can do for more adv. gravity but ill leave that up to you 
} 

私はあなたが何をする必要があるかのオブジェクトにくっつくについてのあなたが言って何を取得する場合

が作るです*編集オブジェクトは、それに固執する必要があるオブジェクトの親

+0

私のコードが更新されました – lemunk

+0

オブジェクトをout =の位置に別のオブジェクトに「スティック」させる方法を更新しました。オブジェクトの0,0を親オブジェクトにし、親オブジェクトが移動する場合はその子も移動させます。私は今夜​​、私が家に帰るときに残りを見ていきます。 – Shredder2500

+0

多くのおかげでシュレッダー – lemunk

関連する問題