ここのようなCCTV制御カメラを作る方法 - Camera 。CCTVコントロール(ユニティ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で回転が制限されている、です。 ありがとう!
連続体にQuaternion.euler(オイラー角)を使用するローテーションは悪い習慣です:https://www.sjbaker.org/steve/omniv/eulers_are_evil.html。 EulerAnglesで回転を行わないので、transform.Rotate()またはtransform.RotateAround()を使用する必要があります。一方、指定された位置を格納する必要がある場合、eulerAnglesは読みやすさの点で優れています。 – Greg
このスクリプトを見つけました '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
すみません。私は正しくフォーマットできません。 – 50VAJJ