各フレームに1〜maxRotation
を追加しています。 Time.deltaTime
を追加する必要があります。それ以外の場合は、フレームレートに応じて異なる時刻にmaxRotation
にアクセスします。これを変更するだけで、GameObjectがどのように回転しても同じ角度で停止するはずです。
これはすばやく簡単な方法です。もう一つは数学をすることです。 rotateAround
transform.position
とカメラの開始transform.position
の差のarctan(Mathf.Atan2
を使用)を見つけて、カメラの現在のtransform.position
からrotateAround
位置を引いたものを減算すると、現在の角度(以下の例)が得られます。この値を使用して、ローテーションを続行するかどうかを確認できます。 Atan2
の動作の詳細については、this answerを参照してください。
Mathf.Atan2
は、渡されたベクトルとX軸の間の角度(ラジアン単位)を返します(おそらくこれは望ましくありません)。私はfind the angle between three vectors(あなたが望むと思う)と思う。それぞれのarctansの違いを取らなければならない(私はこれをチェックしていないし、簡潔さのために擬似コードだ)。これと同じように:
float angle =
Atan2(cameraStartPos.y - rotatePointPos.y, cameraStartPos.x - rotatePointPos.x) -
Atan2(cameraCurrentPos.y - rotatePointPos.y, cameraStartPos.x - rotatePointPos.x);
よりもさらに良いことには、団結を持っているあなたのためのすべてのことを行います!使用Vector3.Angle
:角度は、それが180に到達したときに「フリップ」ので、あなたがいずれかにあなたの最大角度を設定することができますVector3.Angle
から返されたことを
が
public class CameraMovement : MonoBehaviour {
Transform rotAround;
private Vector3 startPosition;
public float maxRotation = 0; // set this to the maximum angle in degrees
void Start()
{
rotAround = GameObject.Find ("CamRotation").GetComponent <Transform>();
startPosition = transform.position;
}
void Update()
{
float currentAngle = Vector3.Angle(rotAround.position - startPosition,
rotAround.position - transform.position));
if (Input.GetKey (KeyCode.D) && maxRotation < currentAngle)
{
transform.RotateAround (rotAround.position, Vector3.down, 100 * Time.deltaTime);
}
if (Input.GetKey (KeyCode.A) && maxRotation < currentAngle)
{
transform.RotateAround (rotAround.position, Vector3.up, 100 * Time.deltaTime);
}
}
}
注:
float angle = Vector3.Angle(rotateAround.position - cameraStart.position,
rotateAround.position - cameraEnd.position));
あなたの最終的なコードのようなものを見ることができます値は180より低く、両側の同じ点で停止します。
100 * Time.deltaTimeは1に等しくありません。間違った仮定です。事実、Time.deltaTimeが次のフレームになるのは決してわかりませんが、おおよそ1/60だから、0.016667です。 – yes
@MikeSmithあなたは定数である 'Time.deltaTime'を決してカウントしてはいけません。これは、現在のフレームと最後のフレームの間を経過した時間だけです。これにより、不規則なフレームレートで計算を規制するのに便利です。 –
@yes Mm、申し訳ありませんが、私はしませんでした。私はフレームレートの時間だと思っていましたが、それは変わる可能性があります。オリジナルの50で、カメラの動きが遅すぎたので、私は100を使用しました。あなたが他の誰かにコメントしていない限り。 –