Jump to content
Unity Insider Forum

Schwimmen


TheEpicSnowWolf

Recommended Posts

Hallo,

ich schreibe mir gerade ein kleines Script, was einen Schwimmeffekt erzeugen soll, wenn sich ein FPC unter Wasser befindet.

 

#pragma strict
var underwaterLevel = 259;
function Start () {

}

function Update () {
 Swim();
}

function Swim(){
 var chMotor: CharacterMotor = GetComponent(CharacterMotor);
 if (transform.position.y < underwaterLevel) {
chMotor.movement.gravity = 0;
ConstantForce.force = Vector3.up * 10;
 } else {
chMotor.movement.gravity = 1;
 }
}

 

Das deaktivieren der Gravity funktioniert soweit schon einmal. Nur das Anwenden der ConstantForce bereitet Probleme. Der Fehler:

An instance of type 'UnityEngine.ConstantForce' is required to access non static member 'force'.
Ich habe ehrlich gesagt keine Ahnung wie ich das beheben soll. Ich habe auch schon einiges gegooglet, komme aber nicht so wirklich voran.

Weiß jemand Hilfe? :)

 

MfG the.wolf

Link zu diesem Kommentar
Auf anderen Seiten teilen

Manchmal geht es doch so einfach ^^ Danke. :)

EDIT: Jetzt habe ich noch ein anders Problem. Und zwar wird die constantFoce nicht richtig angewandt. Lasse ich das Script so wie oben (mit Ausnahme von "constantForce" ;) ), dann bewegt sich der FPC schon wenn er überhalb des underwaterLevels ist, und das nach unten. XYZ-mäßig kann ich mich gar nicht mehr bewegen und springe ich, schieße ich ins All. O.o

Eine Idee? ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie ist denn deine Szene aufgebaut. Liegt der Wasserspiegel denn wirklich bei y=259?

Ich würde die Gravity übrigens nicht abschalten. Ich würde einfach soviel Force hinzufügen, dass sie darüber aufgehoben wird.

Und zwar würde ich umso mehr Force wirken lassen, je tiefer ich bin.

Da die Force ja eine Kraft ist und der Körper dadurch ja beschleunigt wird, hört die Bewegung leider nicht auf, nur weil du die Force nicht mehr ausübst. Die Gravity wird den Körper abbremsen, aber nicht sofort zum stillstand bringen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gefällt mir vom Prinzip her, wenn ich allerdings tief untertauche (also ins Wasser springe), dann tauche ich nicht einfach auf, sonder springe aus dem Wasser heraus. Man müsste also irgendwie den FPC abbremsen, sobald er sich wieder über Wasser befindet. Ich weiß nur nicht so wirklich wie ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du könntest eine Variable setzen, die auf true gesetzt wird, sobald du im Wasser bist.

Wenn du jetzt nicht mehr im Wasser bist und die Variable auf true steht, dann setz du die Velocity auf 0 und setzt auch die Variable wieder auf false.

 

Oder aber du fragst wirklich die Entfernung zum Wasserspiegel ab und machst die Force abhängig von der Wassertiefe. Je näher am Wasserspiegel desto weniger Force. Aber natürlich noch soviel wie benötigt wird um zu schweben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@malzbie: das mit dem bool entspricht dem was Sasche schrieb, oder?

 

@wolf:

 

Was du suchst nennt sich das Archimedische Prinzip im AssetStore und Co oft unter dem Begriff Buoyancy zu finden. Aber kurz und knapp entspricht es dem was malzbie in seinem 2ten Absatz beschreibt. Es ist zwar nicht komplett realistisch, aber das will man meist ja sowieso nicht, eine Annäherung reicht da locker.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ Marrrk:

Ne, ich denke da schon an eine 2te Variable. Denn die isInWater wird ja wohl true sein, wenn man drin ist und immer false, wenn man draußen ist. Wahrscheinlich über einen Trigger gesetzt.

Ich will aber genau den Moment haben wo ich gerade noch im Wasser war aber jetzt nicht mehr bin. Dafür würde ich die 2te Variable nehmen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aus dem Wasser springen ist ansich aber nicht so verkehrt, halte ein leeres leichtes Gefäß unters Wasser und lass es dann los, es poppt aus dem Wasser (kleiner Plastikball), mit der Entfernung zur Wasseroberfläche sollte sich rel leicht das ganze regulieren lassen. Eine extra variable wäre da nicht nötig und das Ergebnis realistischer mit weniger Aufwand.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...