2012-04-06 5 views
2

Verwenden von Unity 3.3. Visual Studio Express 2010. und C#.Einheit 3.3, erstellen Sie lokale Schwerkraft auf Objekt

Ich muss ein Skript machen, das an ein Objekt angehängt wird. Dieses Objekt erzeugt ein eigenes Gravitationsfeld, das alle Objekte in der Umgebung anzieht.

Leider bin ich nicht sicher, wie dies aufgrund der Physik der Einheit zu tun ist. würde ich das Objekt brauchen, um alle anderen Objekte zu übersteuern? übertreibe ich die Physik der Einheit? wie funktioniert das? Oder übertreibe ich Dinge, wenn es ein einfaches Skript ist?

Nein Ich möchte nicht einen starren Körper hinzufügen, so dass das Objekt mit der Schwerkraft fällt, es muss die Schwerkraft erzeugen, die viel stärker ist.

Prost

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); 
     } 
    } 
} 
} 

Dies funktioniert, da es eine negative Kraft hinzufügt, die das Objekt anzieht. Problem ist, dass wenn das attraktive Objekt, dem dieses Skript zugewiesen ist, in der Luft ist. irgendwelche gefangenen Objekte fliegen darauf zu, scheinen dann aber zu fallen, um wieder angezogen zu werden. Irgendwelche Hinweise, warum?

Ich war so etwas wie dieses zu denken, aber es passiert nichts:

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 Ich habe versucht, dies aus, sein scheint gut zu funktionieren, aber seine an dem Objekt angebracht, die angezogen wird. Auch ich hatte gehofft, wenn jemand eine bessere Idee hatte?

public void OnCollisionEnter(Collision col) 
{ 
if(col.gameObject.tag == "GravitySwell") 
{ 
    Debug.Log("i hit it!!!"); 
    rigidbody.velocity = Vector3.zero; 
} 
} 
+0

k Das funktioniert, wenn ich die Schwerkraft vom starren Körper abwende, aber es sieht wirklich mies aus. es ist zu langsam und wenn das Objekt auf die Oberfläche des Gravitationsobjekts trifft, trägt seine Geschwindigkeit, wie es sollte, aber es endet abprallend. auf irgendeine Weise, um es schneller zu bewegen und am Objekt zu kleben, ohne seine Position zu der des Gravitationsobjekts zu machen? – lemunk

Antwort

1

, was Sie tun können, ist eine Kollision Box hinzufügen, dass die Einheit hat als eine Komponente zu irgendwelchen Gameobjects hinzuzufügen und Sie dann überprüfen, ob etwas, das Kollisionsbox und fügen Kraft auf das Objekt eintritt, die kollidieren wird. Ich werde Ihnen bei Bedarf Beispielcode holen.

// bearbeiten

Sie Ihre eigenen Schwerkraft zu einem Skript hinzufügen und sich Ihre eigene Funktion haben Kraft für das Hinzufügen, um es in eine Richtung zu bewegen, zu machen aber nur, damit Sie wissen, können Sie, wie viel Schwerkraft ein rid ändern. Körper tut

aber wenn Sie Ihre eigenen Schwerkraft tun möchten, können Sie tun,

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 
} 

edit *

wenn ich bekommen, was über Sie sagen zu einem Objekt kleben, was Sie tun müssen, ist die machen Objekt der Elternteil des Objekts, das daran festhalten muss

+0

aktualisiert meinen Code – lemunk

+0

Ich aktualisierte mit, wie man ein Objekt "Stick" zu einem anderen mit out = die Position. Was das tut, ist, das 0,0 des Objekts zum übergeordneten Objekt zu machen, und wenn sich das übergeordnete Objekt ebenso bewegt wie sein Kind. Ich werde mir später den Rest anschauen, wenn ich zu Hause bin. – Shredder2500

+0

vielen dank shredder – lemunk