Hey wie kann ich bei unity machen das wen ich w gedrückt habe und ne distance hab das ich zu ner anderen scene gewechselt werde?

...komplette Frage anzeigen

2 Antworten

Hey, wie immer gibts da viele Möglichkeiten.

Du könntest mit Collidern und der OnTriggerStay Methode arbeiten. Das ist eine Methode die nur aufgerufen wird, wenn sich dein Objekt (bzw. dessen Collider) in einem anderen Collider befindet. In der Methode machst du dann deine Abfrage ob der Spieler die W-Taste drückt. Siehe hier: https://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html

2. Variante wäre, wie du bereits gesagt hast, die Distanz abzufragen. Das geht mit Vector3.Distance. Siehe hier: https://docs.unity3d.com/ScriptReference/Vector3.Distance.html

Der Code dazu würde in C# etwa so aussehen:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SceneChange : MonoBehaviour
{

[SerializeField] float minSceneChangeDistance = 1;
[SerializeField] Transform sceneChangeTransform;

void Update()
{
if (Input.GetKeyDown(KeyCode.W) && Vector3.Distance(transform.position, sceneChangeTransform.position) <= minSceneChangeDistance)
{
//Lade eine neue Scene oder Teleportiere den spieler...

}
}
}

Liebe Grüße,

Dosenbiiir

dosenbiiir 08.06.2017, 19:20

Noch eine kurze Notiz:

Das Script müsstest du auf das Spieler Objekt legen und die
"sceneChangeTransform" Variable im Inspector zuweisen (das Objekt welches der Spieler erreichen muss - also das Objekt dessen Distanz zum Spieler zu prüfen ist).

Die "minSceneChangeDistance" Variable ist die minimum Distanz, ab wo der Spieler teleportiert werden kann.

1

Ich empfehle dir, das gesamte Problem in Teilprobleme zu zerlegen:

1. Der Spieler drückt die Taste 'W'
2. Zwischen dem Spieler und einem Punkt muss eine bestimmte Distanz herrschen
3. Die Position des Spielers soll neu gesetzt werden, nachdem eine neue Szene gesetzt wurde.

Daraus erhalten wir jetzt zwei Bedingungen, die es zu überprüfen gilt und eine Aktion, die ausgeführt werden soll, wenn beide Bedingungen erfüllt sind.

// Pseudo-Code!

Vector3 playerposition;
Vector3 distanzPunkt;
int minimaleDistanz;

Transform playerTransform;
Vector3 neuePosition;

private void Update(){
if (Input.GetKeyDown (KeyCode.W) &&
Vector3.Distance(playerposition,distanzPunkt) > minimaleDistanz )
// neue Szene laden
playerTransform.position = neuePosition;
}
}


Siehe auch:
https://docs.unity3d.com/ScriptReference/Input.GetKeyDown.html
https://docs.unity3d.com/ScriptReference/Vector3.Distance.html
https://docs.unity3d.com/ScriptReference/Transform-position.html

Was möchtest Du wissen?