2017-10-26 7 views
0

Ich versuche gerade, eine Kamera zu skripten, die den Player im Fokus hat und sich frei bewegen kann, um die eigene Bewegung des Spielers zu aktivieren. Sie können die Kamera mit dem richtigen xBox-Controller steuern. Die Kamera sollte sich normal auf der X-Achse in einer Umlaufbahn um den Player bewegen, aber wenn Sie die Kamera nach oben oder unten (sagen wir 20 ° nach oben) bewegen, sollte sie auf 0 ° stehen, um den Player erneut zu fokussieren den Joystick und interpolieren zwischen diesen beiden Winkeln.Separate Kamera- und Player-Bewegung in Unity

In meinem Skript kann die Kamera nach oben und unten schauen (aber der Grad ist noch nicht gesperrt, so dass Sie ihn auf der Y-Achse um 360 ° + verschieben können), aber er wird auf 0 ° zurückgesetzt. Außerdem verhält sich die X-Achse nicht so, wie ich es möchte, da sie sich um den Player drehen kann, aber nur 180 ° und dann stoppt sie und wenn der Controller losgelassen wird, setzt sie auch ihre Werte zurück (was ich nicht will für die x-Achse).

Die Kamera ist ein untergeordnetes Objekt eines leeren Spielobjekts. Das Skript ist an das leere Spielobjekt angehängt.

Ich versuche das herauszufinden seit ~ 3 Tagen und ich wäre wirklich dankbar für jeden kleinen Rat. Vielen Dank im Voraus & hier ist mein Skript:

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

public class CameraFollowPlayer : MonoBehaviour 
{ 

    public GameObject target; 
    public GameObject cameraRig; 
    public float rotateSpeedX = 90.0f; 
    public float rotateSpeedY = 5f; 

    float cameraAngle; 

    float startCameraAngle; 

    Vector3 offset; 
    Vector3 currentOffset; 

    public float minRotationY; 
    public float maxRotationY; 

    bool isCameraMoving; 

    void Start() 
    { 
     offset = transform.position - target.transform.position; 

     cameraAngle = transform.localEulerAngles.z; 
     startCameraAngle = cameraAngle; 
     currentOffset = offset; 

    } 

    void Update() 
    { 

     transform.position = target.transform.position + currentOffset; // Folgt dem Spieler 

     float hor = Input.GetAxis("RightJoystickX") * rotateSpeedX; // Input rechter Joystick 
     float ver = Input.GetAxis("RightJoystickY") * rotateSpeedY; 



     if (!Mathf.Approximately (hor, 0)) { 
      transform.RotateAround (target.transform.position, Vector3.up, hor); 
      currentOffset = transform.position - target.transform.position; 

     } 

     if (!Mathf.Approximately (ver, 0)) { 

      cameraAngle += 110f * Time.deltaTime; 

      transform.RotateAround (target.transform.position, Vector3.up, hor); 
      currentOffset = transform.position - target.transform.position; 
      print(ver); 

     } 

     else if (ver <= 0.8f) { 
      //cameraAngle = Mathf.Lerp(cameraAngle, startCameraAngle, 1f - 0.1f * Time.deltaTime); 
      cameraAngle = startCameraAngle; 
     } 

     transform.localEulerAngles = new Vector3(0, hor, cameraAngle); 


    } 




} 

Antwort

0

Wenn sb sonst diese gegoogelt und fand meine Frage für mich gearbeitet:

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

    public class CameraFollowPlayer : MonoBehaviour 
    { 

     public GameObject target; 
     public GameObject cameraRig; 
     public float rotateSpeedX = 9.0f; 
     public float rotateSpeedY = 5f; 

     float cameraAngle; 
     float startCameraAngle; 

     Vector3 offset; 
     Vector3 currentOffset; 

     bool isCameraMoving; 


     void Start() 
     { 
      offset = transform.position - target.transform.position; 

      cameraAngle = transform.localEulerAngles.z; 
      startCameraAngle = cameraAngle; 
      currentOffset = offset; 

     } 

     void Update() 
     { 

      transform.position = target.transform.position + currentOffset; // Folgt dem Spieler 

      float hor = Input.GetAxisRaw("RightJoystickX") * rotateSpeedX; // Input rechter Joystick GetAxis wenn Bewegung ausschwingen soll 
      float ver = Input.GetAxisRaw("RightJoystickY") * rotateSpeedY; // GetAxis wenn Bewegung ausschwingen soll 


      if (!Mathf.Approximately (hor, 0)) { 
       transform.RotateAround (target.transform.position, Vector3.up, hor); 
       currentOffset = transform.position - target.transform.position; 

      } 


      if (ver != 0) { 

       //cameraAngle += 110f * Time.deltaTime; 
       if (ver > 0) 
       { 

        cameraAngle += 110f * Time.deltaTime; 
        if (cameraAngle >= 420f) 
        { 
         cameraAngle = 420f; 
        } 

       } 
       if (ver < 0) 
       { 

        cameraAngle -= 110f * Time.deltaTime; 

        if (cameraAngle <= 290f) 
        { 
         cameraAngle = 290f; 
        } 
       } 


       transform.RotateAround (target.transform.position, Vector3.up, hor); 
       currentOffset = transform.position - target.transform.position; 
       transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, cameraAngle); 

      } 

      else 
      { 
       cameraAngle = Mathf.Lerp(startCameraAngle, cameraAngle, 1f - 0.9f * Time.deltaTime); 
       transform.localEulerAngles = new Vector3(transform.localEulerAngles.x, transform.localEulerAngles.y, cameraAngle); 

      } 
+0

Wenn dies für Sie gearbeitet haben, können Sie Ihre eigene Antwort akzeptieren auch . (Nach 48 Stunden). Wenn Sie darüber lesen möchten, klicken Sie bitte [hier] (https://stackoverflow.blog/2009/01/06/accept-your-own-answers/) – Thalthanas

Verwandte Themen