2016-07-26 5 views
-1

Wenn ich jetzt GetKeyDown statt KeyDown verwende, drückt die Taste "o" nichts. Aber wenn ich GetKey und dann KeyCode.O verwende, wenn ich auf die O-Taste drücke, hört der Charakter auf zu gehen, aber ich muss die O-Taste ständig gedrückt halten, wenn ich den Schlüssel loslasse, wird der Charakter weitergehen.Wie kann ich Input.GetKey einmal innerhalb der Update-Funktion drücken?

Was ich tun möchte, ist einmal, wenn ich einmal auf die Taste O klicke, wird der Charakter aufhören zu gehen, auch wenn ich den Schlüssel loslasse und dann, wenn ich auf die Taste "p" klicke, wird das Gehen fortgesetzt.

Der Grund, warum ich die Geschwindigkeit Eigenschaft verwenden bin für Pause/das Gehen auch weiterhin ist, dass, wenn ich machen:

gameObject.GetComponent<Animator>().Stop(); 

Der Charakter Anschlag zu Fuß, aber dann den Rest der Szene/Welt die bewegt Charakter. Und wenn ich zu verwenden versucht:

gameObject.GetComponent<Animator>().Play(); 

Dann muss ich wie Play einige Parameter im Play setzen („Walk“), aber es hat nicht funktioniert.

Aus diesem Grund habe ich mich entschieden, die Speed-Eigenschaft für pause/continue zu verwenden.

using UnityEngine; 
using System.Collections; 

public class Ai : MonoBehaviour { 

    Animator _anim; 
    // Use this for initialization 
    void Start() { 

     _anim = GetComponent<Animator>(); 
    } 


    // Update is called once per frame 
    void Update() { 

     if (Input.GetKey (KeyCode.Z)) { 
      _anim.speed = 20.0f; 
     } 

     if (Input.GetKeyDown ("o")) 
      gameObject.GetComponent<Animator>().speed = 0; 
     if(Input.GetKeyDown("p")) 
      gameObject.GetComponent<Animator>().speed = 2; 
    } 
} 

Antwort

1

Input.GetKeyX können nur Schlüssel erhalten, die unter Edit > Project Settings > Input angegeben sind. Sie müssen dort Ihren Schlüssel angeben, wenn dieser nicht mit einem der vorhandenen übereinstimmt.

Ändern Sie einfach eines der vorhandenen, wenn Sie es nicht brauchen, oder ändern Sie die size, um ein Extra zu erstellen. Der Name der Achse wird in Input.GetKeyX eingegeben, zum Beispiel Input.GetKeyDown("Fire1").

Edit:
Einige vertiefende Informationen in der Dokumentation: https://docs.unity3d.com/Manual/ConventionalGameInput.html

+0

Ok gefunden, wie es geht. Nicht sicher, ob es der richtige Weg ist, aber es funktioniert. Im Fenster> Animator habe ich vor einem leeren Zustand einen Walk namens Walk erstellt und gesetzt ist es standardmäßig so, dass der Charakter immer läuft wenn er das Spiel mit dem humanoidwalk ausführt. Jetzt habe ich einen neuen leeren Zustand namens Stop und die Verwendung der Humanoididle hinzugefügt und im Skript verwende ich: Input.GetKeyDown (KeyCode.O) und dann _anim.Play ("Stop"); und es funktioniert. Ist das ein guter Weg? –

+0

Klingt gut. Hängt etwas davon ab, was Sie wollen. Sie können den Standardstatus auch inaktivieren. Außerdem können Sie im Animator Übergänge erstellen und sie mit Variablen verknüpfen, die Sie dort erstellen können. Z.B. Sie können einen Bool 'isWalking' (oder was auch immer) machen und einen' false -> true' Übergang vom Leerlauf zum Laufen machen. Dann ändern Sie in Ihrem Code das Bool. Sehen Sie sich dieses Tutorial https://unity3d.com/learn/tutorials/topics/animation/animator-controller?playlist=17099 und Nummer 4 für die Einrichtung eines Animators an. –

Verwandte Themen