質問: -1.0f; } if (diffY != 0) { transform.RotateAround (player.transform.position, Vector3.up, 30 * Time.deltaTime * adjRotate); } }
回答: 角度差を求めるのはそういったことの考慮が面倒ですよね... DeltaAngleならその辺の計算が楽になるかと思いますが、いかがでしょう? 参考: 数学系の処理を扱うMathfの全変数と全関数【Unity】 - (:3[kanのメモ帳] ``` void Update(){ diffY = Mathf.DeltaAngle(camera.transform.localEulerAngles.y, player.transform.localEulerAngles.y); // player.transform.localEulerAngles.y - camera.transform.localEulerAngles.yの代わりにDeltaAngleを使用 if (0 < diffY) { // DeltaAngleを用いればdiffYの絶対値は180°を超えないので、条件を簡略化 adjRotate = 1.0f; } else{ adjRotate = -1.0f; } // adjRotate = Mathf.Sign(diffY); // 上記ifによる分岐の代わりに、こちらでもいいかもしれません if (diffY != 0) { transform.RotateAround (player.transform.position, Vector3.up, Mathf.Min(30 * Time.deltaTime, Mathf.Abs(diffY)) * adjRotate); // 目標角に到達したときの振動を防ぐため、30 * Time.deltaTimeがdiffYの絶対値を超えないよう調整...絶対値はMathf.Abs(diffY)でなく、diffYにdiffYの符号を掛ける、つまりdiffY * adjRotateでもいいかと思います } } ```