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