2016-04-03 3 views
0

Ich bin nur in Unity5, da es mein Schulprojekt ist. Sie sagten mir, ich solle ein fps-Spiel machen und ich versuche, einen fps zu machen, der die Kamera durch Q und E drehen lässt, aber ich kann die Kamera nicht mit der Maus bewegen. Und wenn ich die Maus eingeben möchte, kann ich meinen fps Charakter überhaupt nicht bewegen. Hier ist mein Code:Wie kann ich Maus Kamera mit der Maus für fps in Einheit anzeigen 5

using UnityEngine; 

public class Player : MonoBehaviour { 

private MazeCell currentCell; 

private MazeDirection currentDirection; 

public void SetLocation (MazeCell cell) { 
    if (currentCell != null) { 
     currentCell.OnPlayerExited(); 
    } 
    currentCell = cell; 
    transform.localPosition = cell.transform.localPosition; 
    currentCell.OnPlayerEntered(); 
} 

private void Move (MazeDirection direction) { 
    MazeCellEdge edge = currentCell.GetEdge(direction); 
    if (edge is MazePassage) { 
     SetLocation(edge.otherCell); 
    } 
} 

private void Look (MazeDirection direction) { 
    transform.localRotation = direction.ToRotation(); 
    currentDirection = direction; 
} 

private void Update() { 



    if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.UpArrow)) { 
     Move(currentDirection); 
    } 
    if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)) { 
     Move(currentDirection.GetNextClockwise()); 
    } 
    if (Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.DownArrow)) { 
     Move(currentDirection.GetOpposite()); 
    } 
    if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) { 
     Move(currentDirection.GetNextCounterclockwise()); 
    } 
    if (Input.GetKeyDown(KeyCode.Q)) { 
     Look(currentDirection.GetNextCounterclockwise()); 
    } 
    if (Input.GetKeyDown(KeyCode.E)) { 
     Look(currentDirection.GetNextClockwise()); 
    } 
} 

}

Antwort

0

zunächst einmal sollten Sie die "else if" s in der Update-Funktion remoove und ersetzen Sie sie mit einem einfachen "wenn". weil die folgenden Funktionen übersprungen werden, sobald eine Ihrer if-Anweisungen wahr ist. das sollte es beheben.

+0

irgendwie ich nehme an, Sie neu sind so hier ein Vorschlag bei der Codierung: Sie jemals nicht nur, wenn in Ihrem Code verwenden esle verwenden, wenn {} else {if {...}}. es macht die Dinge viel einfacher: D – MrSunshine

+0

dann was ??? Herr, bitte sagen Sie mir mehr –

+0

sry wurde gedrückt geben Sie zu bald xD – MrSunshine

0

try this:

public class Player : MonoBehaviour { 
//Position of mouse since last change in viewdirection 
private float mousePosLast; 

//Tollerance of mouse input 
//this is optional but makes the the input not that sensitive 
public float mouseTollerance; 

//sets the correct position of mouse on start 
public void Start() { 
    mousePosLast = Input.mousePosition.x; 
} 


public void Update() { 
    /* 
    ...other update code... 
    */ 

    if (Input.GetKeyDown(KeyCode.Q)) { 
       Look(currentDirection.GetNextCounterclockwise()); 
     } 
     if (Input.GetKeyDown(KeyCode.E)) { 
      Look(currentDirection.GetNextClockwise()); 
     } 

    //check if change in mouse position is big enougth to trigger camera rotation 
    if(Mathf.Abs(Input.mousePosition.x - mousePosLast) > mouseTollerance){ 
     //check whether to turn right or left 
     if(Input.mousePosition.x - mousePosLast > 0){ 
      Look(currentDirection.GetNextCounterclockwise()); 
     }else{ 
      Look(currentDirection.GetNextClockwise()); 
     } 
    } 
} 

private void Look (MazeDirection direction) { 
     transform.localRotation = direction.ToRotation(); 
     currentDirection = direction; 

    //set mousePosLast to current mouseposition on every change -> avoids strange effects 
    mousePosLast = Input.mousePosition.x; 
} 

}

+0

wow es mich dazu bringt, durch die Wände des Spiels zu sehen, aber trotzdem danke. –

+0

vielleicht sollten Sie über Ihren gesamten Code schauen .. es könnte einige Probleme geben, die nicht direkt von Ihrer Player-Klasse verursacht werden. – MrSunshine

+0

ah nein, das ist der ganze Code, den ich für jetzt habe –