Jump to content
Unity Insider Forum

Biegsame Metallfeder


Track505

Recommended Posts

Ich würde mal versuchen die Feder in kleine 3d Teile zu zerlegen und sie über:

https://docs.unity3d...pringJoint.html

 

zu verbinden und mal "testen" wie sich das ganze Konstrukt dann verhält.. aber nur so eine Idee, ich hab sowas noch nicht gemacht. Du kannst ja mal anfangen 3D Würfel (+ Rigidbody) schräg übereinander zu setzen und sie damit zu verbinden, wenn das Konstrukt steht mal am obersten Würfel über die Physikengine ziehen und mal schauen was passiert, poste mal das Ergebnis interessiert mich auch...

Der Vorteil wäre, diese "Feder" ist dann voll mit der Physikengine kompatibel. Ich denke das Ergebnis wird ein sehr instabiles Konstrukt sein, sehr flexibel und wie eine Feder wirken, aber "federn" in dem Sinne wird es wohl nicht, da muss man über eine Extrakraft (siehe TobiLine) nachhelfen.

 

ps:

Wenn du das Ganze dann mit 3D Planes machst (an die Planes muss ein Skript dran, dass sich die Plane immer zur Camera dreht - Billboarding) und du dann eine Federtexture drauflegst + Transparent-Shader sollte das ganze dann auch wie eine Feder aussehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi.

Wenn Du die Feder visuell darstellen willst, kannst Du eine Feder in z.B. Cinema4D oder Blender usw modellieren. Dieser Feder verpasst Du noch ein passendes Rig und eine passende Wichtung. Dann sollte das was Du vorhast funktionieren. Mit Bordmitteln kannst Du auch den "Effekt" einer Feder herstellen, nur mit der Darstellung wird es nach meiner Meinung schwierig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also so richtig klar bin ich noch nicht gekommen, vielleicht gehts ja auch einfacher. Also ich möchte einen Gegenstand bauen der sich in jede Richtig kippen lässt um 90 grad. Wie auf einer Metallfeder. Der soll dann auch eben wieder so hochschnippen und in seine Ausgangsposition zurück. Also touch, 90grad runterbiegen, loslassen...doiiing :D Vielleicht hat ja noch jemand ne Idee vom Script her. Ich habe da leider noch nicht viel Ahnung. Soll ein altes Fussballspiel werden was ich hier neben mir liegen habe. Vielleicht hift ein Bild weiter. Am Fuß ist halt die Kugel und reagiert dann phsikalisch wenn der "Fussballer" nach oben schnellt. Alles klar? ;)

Danke schonmal

post-6138-0-62123000-1476197917_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke man sollte da zwei dinge unterscheiden:

 

1. Eine Feder die sich auch Physikalisch wie eine Feder verhält

2.Eine Feder die sich zb. durch eine Animation wie eine Feder verhält.

 

zu.1. Soll sich die Feder wirklich Physikalisch wie eine Feder verhalten dann musst da das ganze auf jeden Fall irgend wie in Unity bauen, vermutlich eigene Shader programmieren und ziemlich viel Aufwand betreiben.

 

zu 2. Soll die sich nur visuell wie eine Feder verhalten dann sehe ich einige Wege wie man das umsetzen kann.

 

a) Du könntest in einem 3D Programm ne Animation erstellen und diese Baken.

b Du könntest wie das Bemmi schon vorgeschlagen auch via Rigg lösen.

c) Du könntest das durch Blendshapes lösen dafür hättest du dann die Feder als zusammen gedrücktes Modell und einmal als auseinander gedrücktes Modell dann könntest du zwischen den beiden Zuständen die Animation interpolieren.

 

Wenn du das noch in verbesserter Version haben willst dann könntest du den Zustand auseinander auch in verschiedene Richtungen als Modell festlegen. (zb Federung nach links, Federungs nach recht, federung nach vorne, Federung nach hinten usw.

Der Vorteil ist auch das du zwischen mehren zuständen interpolieren kannst. zb 20% nach vorne 30% nach link somit hättest du im Prinzip 360 grad abgedeckt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich mir das Bild anschaue hat es weniger mit einem Feder-Aussehen zu tun sondern mit einer Federwirkung.

Also wenn der Spieler umgedrückt wird soll er in die Gegenrichtung zurückknallen und dann irgendwann in der Mittelposition zum stehen kommen.

Das ganze würde ich mit AddForce angehen. Und der Spieler braucht halt einen Punkt der in Festhält... Eventuell einen Hinge Joint.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich mir das Bild anschaue hat es weniger mit einem Feder-Aussehen zu tun sondern mit einer Federwirkung.

Also wenn der Spieler umgedrückt wird soll er in die Gegenrichtung zurückknallen und dann irgendwann in der Mittelposition zum stehen kommen.

Das ganze würde ich mit AddForce angehen. Und der Spieler braucht halt einen Punkt der in Festhält... Eventuell einen Hinge Joint.

Ja genau. Dann schau ich mal nach AddForce und Hinge. thx

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 year later...

Hallo. Ich glaube es ist einfacher als gedacht.

Also ich bräuchte ein Script was ein object bewegt aber an Ort und Stelle bleibt.. Es kann genau so reagieren wie wenn mal einen ControllerStick bewegt. Eigentlich ganz genau so.

Also Object was auf Boden steht, sich in jede Richtung bewegen lässt (Achse vom Object auf Boden) und dann wenn ich loslasse wieder in die Ausgansform zurückschnippt. Eben wie wenn man so nen Analogcontroller bedient. Das wäre dufte.

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

Fangen wir mal mit dem Einfachen an:

public float range = 2;

private void Update()
{
  var input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); // oder irgendetwas anderes
  input = Vector3.ClampMagnitude(input, 1);
  
  transform.localPosition = input * range;
  
  // Hier: Zurückschnippen
}

Das Zurückschnippen ist jetzt nicht so ganz trivial. Wenn du einen Knopf machen würdest, den man wieder loslässt, wäre es einfach - aber das ist irgendwie nicht dasselbe.

Versuchen wir's also mit dem Stick. Ich würde erstmal einen Countdown einbauen wollen, der eine sehr kurze Zeit zählt, sobald der Stick von ganz außen nach innen zu gehen beginnt. Sollte eine Position genügend nahe an der Stick-Mitte erreicht werden, bevor der Countdown abgelaufen ist, zählt das als Schnippen. Also erstmal ein paar Konstanten und eine Variable:

private const float schnippCountdownDuration = 0.3f;
private const float schnippOuterThreshold = 0.9f;
private const float schnippInnerThreshold = 0.3f;
private float schnippCountdown = -1;

und dann der Schnipp-Code in Update, wo oben noch nur der Kommentar steht:

var inputMagnitude = input.magnitude;

if(inputMagnitude >= schnippOuterThreshold) // Wenn der Stick weit genug außen ist
{
  schnippCountdown = schnippCountdownDuration; // Setze den Countdown-Timer!
}
else // Wenn der Stick aber nicht mehr ganz außen ist
{
  if(schnippCountdown >= 0) // Wenn der Countdown noch läuft
  {
    if(inputMagnitude <= schnippInnerThreshold) // Wenn außerdem der Stick nah genug an der Mitte ist
    {
      Schnipp(); // Es wird geschnippt!
    }
    else // Wenn der Stick aber noch nicht nah genug an der Mitte ist
    {
      schnippCountdown -= Time.deltaTime; // Lass den Countdown weiterzählen
    }
  }
}

Was da passiert, anders aufgeschrieben:

Der Countdown

  • wird auf den Startwert (schnippCountdownDuration) gesetzt, solange der Stick weit genug außen ist
  • zählt nur dann runter, wenn der Stick weder ganz außen, noch nah genug an der Mitte ist

Der Ablauf ist also:

  1. Stick wird nach außen gedrückt ->  Countdown wird "aufgezogen" wie eine alte Küchenuhr
  2. Stick verlässt den Äußeren bereich -> Countdown wird runtergezählt
  3. Stick erreicht die Mitte, bevor der Countdown 0 ist -> Schnipp() wird ausgeführt
    oder
    Countdown läuft ab, bevor die Mitte erreicht wird -> nix passiert (der Spieler kann also weiter das Objekt bewegen)
    oder
    Stick wird wieder nach außen gedrückt -> Countdown wird wieder "aufgezogen"
Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...