fc2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】【C#】SmoothFollow を C# で書いてみる

【Unity】【C#】SmoothFollow を C# で書いてみる  


 色々サンプルみてると Standard Assets の「SmoothFollow.js」を使っていて、C# スクリプトから SmoothFollow をクラス名(型)でそのまま使っていたりするけど(SmoothFollow sf = ~みたいに)、なぜか今使っているバージョン(Unity4.6.1f1/MonoDevelop4.0.1)では JavaScript(UnityScript) で書かれたコードはクラス名(型)として使えないんだよね。Joystick.js なんかも入力候補に出てこない(手入力してもエラー。ルートに置いてもダメ)。インスト失敗したのかな…?まぁいいやと思って、試しに js をそのまま C# スクリプトに書き直してみたら、うまく行った。

●SmoothFollow.js の C# 版
using UnityEngine;
using System.Collections;

[AddComponentMenu("Camera-Control/SmoothFollow")]
public class SmoothFollow : MonoBehaviour {

/** 追従するオブジェクト */
public Transform target;

/** Z方向の距離 */
public float distance = 10.0f;

/** Y方向の高さ */
public float height = 5.0f;

/** 上下高さのスムーズ移動速度 */
public float heightDamping = 2.0f;

/** 左右回転のスムーズ移動速度 */
public float rotationDamping = 3.0f;

void LateUpdate() {
if (target == null) {
return;
}

//追従先位置
float wantedRotationAngle = target.eulerAngles.y;
float wantedHeight = target.position.y + height;

//現在位置
float currentRotationAngle = transform.eulerAngles.y;
float currentHeight = transform.position.y;

//追従先へのスムーズ移動距離(方向)
currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle,
rotationDamping * Time.deltaTime);
currentHeight = Mathf.Lerp(currentHeight, wantedHeight, heightDamping * Time.deltaTime);

//カメラの移動
var currentRotation = Quaternion.Euler(0, currentRotationAngle, 0);
Vector3 pos = target.position - currentRotation * Vector3.forward * distance;
pos.y = currentHeight;
transform.position = pos;

transform.LookAt(target);
}
}


 書いた後で気がついたんだけど、英語のフォーラムの方に js→C# の自動変換をしてバグったという質問に、修正版が書かれてあったけど、ほぼ同じだった。まぁ、日本語でコメント書いてあるから日本人向けということで(笑)。

 自動変換でバグる理由は js で transform.position.y = currentHeight; となっている部分をそのまま C# で書くと、テンポラリな値になってしまって、無効になってしまうからなんだよね。Java なんかもこういう書き方するから、私も最初間違えた。「あれ?なんか警告出てるな」って思って修正したので、すぐ上手く動いたけどね。自動変換ツールっていうのも微妙なんだな…。私は勉強にもなるし、手と頭で変換するからツールは使ったことないけど。


(関連記事)
【Unity】【C#】SmoothFollow に回転アングルと距離の遠近機能を付けてみる


関連記事
スポンサーサイト



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityライブラリ  C#  カメラスクリプト 
tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/162-17aeabf1
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop