2017-10-26 14 views
0

私は現在、プレーヤーがフォーカスを持っているカメラをスクリプト化しようとしています。 適切なxBoxコントローラでカメラを制御できます。 カメラはプレーヤーの周りの軌道上でX軸上を正常に動くはずですが、カメラを上または下に移動させると(上に20°と言えば)、0°になるはずですその2つの角度の間を補間します。ユニティでのカメラとプレーヤーの動きの移動

私のスクリプトでは、カメラは上下を見ることができます(ただし、度はまだロックされていないので、Y軸上で360°+上に動かすことができます)が、0度にリセットされます。さらに、x軸はプレーヤーの周りを回ることができますが180度しか回転しないので動作しませんし、コントローラーを移動させると値が戻ってくるようにしますx軸の場合)。

カメラは空のゲームオブジェクトの子オブジェクトです。スクリプトは空のゲームオブジェクトに添付されます。

私は〜3日後にこれを理解しようとしています。小さなアドバイスについては本当に感謝しています。ここでは、事前&で おかげで私のスクリプトです:

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); 


    } 




} 

答えて

0

他のSBはこれをGoogleで検索して、これは私のために働いていた私の質問を見つけた場合:

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

これはあなたのために働いている場合は、あなたも、あなた自身の答えを受け入れることができます。(48時間後)。あなたがそれについて読むことを望むなら、[ここ](https://stackoverflow.blog/2009/01/06/accept-your-own-answers/)をチェックしてください。 – Thalthanas

関連する問題