2017-08-11 16 views
-1

ここのようなCCTV制御カメラを作る方法 - CameraCCTVコントロール(ユニティ3D)

public float Smoothness = 0.3F; 
    public Vector2 Sensitivity = new Vector2(4, 4); 
    public Vector2 LimitX = new Vector2(-70, 80); 
    public Vector2 LimitY = new Vector2(-60, 20); 

    private Vector2 NewCoord; 
    public Vector2 CurrentCoord; 
    private Vector2 vel; 

    void Update() 
    { 
     NewCoord.x = Mathf.Clamp(NewCoord.x, LimitX.x, LimitX.y); 
     NewCoord.y = Mathf.Clamp(NewCoord.y, LimitY.x, LimitY.y); 
     NewCoord.x -= Input.GetAxis("Mouse Y") * Sensitivity.x; 
     NewCoord.y += Input.GetAxis("Mouse X") * Sensitivity.y; 
     CurrentCoord.x = Mathf.SmoothDamp(CurrentCoord.x, NewCoord.x, ref vel.x, Smoothness/2); 
     CurrentCoord.y = Mathf.SmoothDamp(CurrentCoord.y, NewCoord.y, ref vel.y, Smoothness/2); 
     transform.rotation = Quaternion.Euler(CurrentCoord.x, CurrentCoord.y, 0); 
    } 

しかし、私のバージョンが正しくない作品 - それはそれは天井にあり、それはそれはここのようなものであるXとYで回転が制限されている、です。 ありがとう!

+0

連続体にQuaternion.euler(オイラー角)を使用するローテーションは悪い習慣です:https://www.sjbaker.org/steve/omniv/eulers_are_evil.html。 EulerAnglesで回転を行わないので、transform.Rotate()またはtransform.RotateAround()を使用する必要があります。一方、指定された位置を格納する必要がある場合、eulerAnglesは読みやすさの点で優れています。 – Greg

+0

このスクリプトを見つけました 'public float speedH = 2.0f; public float speedV = 2.0f; プライベートfloatヨー= 0.0f; プライベートフロートピッチ= 0.0f; void Update(){ yaw + = speedH * Input.GetAxis( "Mouse X"); ピッチ - = speedV * Input.GetAxis( "マウスY"); transform.eulerAngles = new Vector3(ピッチ、ヨー、0.0f); } 'が表示されていますが、上限を把握することはできません。私が置いた場合 'if(gameObject.transform.rotation.x <116F) { ピッチ - = speedV * Input.GetAxis("マウスY "); } ' それから反応はありません – 50VAJJ

+0

すみません。私は正しくフォーマットできません。 – 50VAJJ

答えて

0

xとyの発生を確認します。たとえば、次のように

NewCoord.x -= Input.GetAxis("Mouse Y") * Sensitivity.x; 
NewCoord.y += Input.GetAxis("Mouse X") * Sensitivity.y; 

は、おそらく次のようになります。

NewCoord.x -= Input.GetAxis("Mouse X") * Sensitivity.x; 
NewCoord.y += Input.GetAxis("Mouse Y") * Sensitivity.y; 

まさに "正しくない作品" とは何?


更新:

が「正しくない作品」 - 私はLimitXとLimitY値を設定するが、私は回転に制限が天井にカメラの効果を作ることができない

- >制限された範囲にクランプしていて、NewCoordを操作した後です。

問題(あなたのコードはコメント):

// Clamping is done here: 
NewCoord.x = Mathf.Clamp(NewCoord.x, LimitX.x, LimitX.y); 
NewCoord.y = Mathf.Clamp(NewCoord.y, LimitY.x, LimitY.y); 

// Clamped values get manipulated here, AFTER clamping, 
// values will probably exceed clamped (Limited) Range 
NewCoord.x -= Input.GetAxis("Mouse Y") * Sensitivity.x; 
NewCoord.y += Input.GetAxis("Mouse X") * Sensitivity.y; 

だから、あなたがする必要があるすべては、これらの2つのラインペアを反転です:

ソリューション:

// Input Values are applied here 
NewCoord.x -= Input.GetAxis("Mouse Y") * Sensitivity.x; 
NewCoord.y += Input.GetAxis("Mouse X") * Sensitivity.y; 

// Clamping is done here, to guarantee values are between chosen Limits 
NewCoord.x = Mathf.Clamp(NewCoord.x, LimitX.x, LimitX.y); 
NewCoord.y = Mathf.Clamp(NewCoord.y, LimitY.x, LimitY.y); 
+0

NewCoord.x - = Input.GetAxis( "Mouse Y")* Sensitivity.x; NewCoord.y + = Input.GetAxis( "Mouse X")* Sensitivity.y; それ以外の場合は逆の制御があります。 "正しく動作しません" - LimitXとLimitYの値を設定しましたが、回転の制限がある天井でカメラの効果を出すことはできません – 50VAJJ

関連する問題