2017-08-07 10 views
0

私は、画面上で右クリックしてカメラを回転させて見ることができる古典的な第三者エフェクトを作成しようとしています。私がしたいのは、カーソルを見えなくし、マウスカーソルをそのポイントに固定し、カメラをマウスX /マウスY軸を回転させることです。私は私のマウスは、中心部にジャンプしたくないしかしカメラを回転させるユニティアンカーマウスの位置

をCursorLockedMode.Locked以前の記事は、あなたが

を使用しない限り、あなたが直接あなたのマウスを固定することができないと主張していることを読みました後でスクリーン上の前のポイントに戻すことができなかった場合は、私はスクリーンに戻っていません。これらの記事では、私はそれを行うための唯一の方法を読んだことがあります。ソフトウェアを制御するためにカーソルを再作成し、その位置を操作できますが、その場合はどこから開始するのかわかりません。

  if (rightclicked) 
      { 
       cursorPosition = currentCursorPosition; 
       Cursor.Visible = false; 
       //Retrieve MouseX and Mouse Y and rotate camera 
      } 

基本的に、私は擬似コードでこれを達成しようとしていると私が読んだすべてが、それは達成不可能思われてしまいます。

ありがとうございます。

+1

私はあなたの問題のために有用なものが見つかりました:http://answers.unity3d.com/questions/698254/how-do-i-rotate-the-camera-around-the-player-chara.htmlを – BlackMB

答えて

2

このスクリプトを試して、あなたの質問に答えることができますか?

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

public class CameraRotateOnRightClick : MonoBehaviour { 
    public float angularSpeed = 1.0f; 
    public Camera targetCam; 
    private Vector3 pivotPointScreen; 
    private Vector3 pivotPointWorld; 
    private Ray ray; 
    private RaycastHit hit; 

    // Use this for initialization 
    void Start() { 
     //Set the targetCam here if not assigned from inspector 
     if (targetCam == null) 
      targetCam = Camera.main; 
    } 

    // Update is called once per frame 
    void Update() { 
     //When the right mouse button is down, 
     //set the pivot point around which the camera will rotate 
     //Also hide the cursor 
     if (Input.GetMouseButtonDown (1)) { 
      //Take the mouse position 
      pivotPointScreen = Input.mousePosition; 
      //Convert mouse position to ray 
      // Then raycast using this ray to check if it hits something in the scene 
      //**Converting the mousepositin to world position directly will 
      //**return constant value of the camera position as the Z value is always 0 
      ray = targetCam.ScreenPointToRay(pivotPointScreen); 
      if (Physics.Raycast(ray, out hit)) 
      { 
       //If it hits something, then we will be using this as the pivot point 
       pivotPointWorld = hit.point; 
      } 
      //targetCam.transform.LookAt (pivotPointWorld); 
      Cursor.visible = false; 
     }else if(Input.GetMouseButtonUp(1)){ 
      Cursor.visible = true; 
     } 
     if (Input.GetMouseButton (1)) { 
      //Rotate the camera X wise 
      targetCam.transform.RotateAround(pivotPointWorld,Vector3.up, angularSpeed * Input.GetAxis ("Mouse X")); 
      //Rotate the camera Y wise 
      targetCam.transform.RotateAround(pivotPointWorld,Vector3.right, angularSpeed * Input.GetAxis ("Mouse Y")); 
     } 

    } 
} 
+0

ありがとね!私は今夜​​それを試してみるよ。今すぐコードを読んで、スクリプトが右クリックしたときにマウスをその位置に固定するだけでなく、必要なことをすべて実行するように思えますよね?その機能は単一性で可能ですか? –

+1

ようこそ。 Yepp、私はテストユニティプロジェクトで試してみました。 – ZayedUpal

+0

ちょうど試しました。 X軸とY軸だけに影響するスクリプトの場合、Z軸も同様に回転するのはなぜですか?これは私が決して完全に理解できない奇妙な回転の振る舞いですか。私はZの移動を望んでいません –

関連する問題