ラベル Unity の投稿を表示しています。 すべての投稿を表示
ラベル Unity の投稿を表示しています。 すべての投稿を表示

2014年5月20日火曜日

Unity : アニメーションの特定のタイミングで関数を呼ぶ


このエントリーをはてなブックマークに追加
参考 : 【Unity】 Unity4.3のMecanimのアニメーションイベントの使い方

参考先に全部書いてあって補足する事もないの説明省略。

2014年5月19日月曜日

Unity : 動く床に乗ったプレイヤーを動かす


このエントリーをはてなブックマークに追加
プレイヤー(操作対象)が動く床の上に載ったら、
プレイヤーを床の子オブジェクトにするという方法で実装。
(注意:子オブジェクトにするため、床オブジェクトのスケーリングがプレイヤーに適用されてしまいます。)
上に乗っている場合、という判定のために床自体の Collider とは別に
上側の面に Collider を追加した。



動く床のメインオブジェクトは MovingFloor。
MovingFloorParent は空のゲームオブジェクトで、
MovingFloor のアニメーションを相対座標で動かすために親を作っている。

空のゲームオブジェクトに Box Collider 2D (Is Trigger 有効) を付けたものを MovingFloor の子オブジェクトする(とりあえず Surface と命名)。プレイヤーと接触するよう MovingFloor よりも少しだけはみ出しておく。(全体を覆うと、下や横方向から接触した場合にもプレイヤーが動く床にくっついてしまうので、上だけ)

Surface にはプレイヤーの当たり判定で判別できるよう Tag をつけておく。

プレイヤーに付けたスクリプトの OnTriggerEnter2D で、
transform.parent が null の時に Surface に接触したら、
transform.parent = other.gameObject.transform;
としてプレイヤーを子オブジェクトにする。

transform.parent が null でない時に OnTriggerExit2D で
Surface と離れたら、
transform.parent = null;
として親子関係を切り離す。以下の様な感じ。

載った瞬間にピタっとくっつき過ぎる感じなのがちょっと微妙な気もするけど、
どうしたらいいんだろう?

2014年5月15日木曜日

Unity : StartCoroutine とスレッドセーフティ


このエントリーをはてなブックマークに追加
未だに Coroutine の挙動がよくわかっていません。。。

ふと「StartCoroutine で作ったメソッド内で変数を弄る時ってスレッドセーフにするよう考える必要あるのかな?」と思い、ThreadId を取得してみました。

Debug.Log("ThreadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId.ToString());

void Update() 内で取得した ThreadId と、
StartCoroutine で始めた関数内で ThreadId は同じだったので、競合を考える必要はないようです。

2014年5月10日土曜日

Unity : FixedUpdate と Update の違い


このエントリーをはてなブックマークに追加
Unity 公式のチュートリアルビデオ(英語) : Update and FixedUpdate
リファレンス : MonoBehaviour.FixedUpdate()

簡単にまとめると、

FixedUpdate


物理シミュレーション用のアップデート関数で、必ず一定時間毎に呼ばれる。
FixedUpdate 関数が呼ばれた後、必要な物理計算が行われる。
物理オブジェクト(RidigBody) に対して AddForce で力を加える場合等に利用する。
1フレーム(1回のUpdate)に対して複数回呼ばれる事がある。
FixedUpdate の中で Time.deltaTime を呼ぶと、Update からの経過時間ではなく fixedDeltaTime が取得できる(!)

Update

描画フレームのアップデートに対応した関数。一定時間毎に呼ばれるとは限らない。
非物理オブジェクトを Translate 等で直接移動する場合は、こちらの関数の中で Time.deltaTime を使って時間を考慮して移動する。
Time.deltaTime で得られる値は前回の Update からの経過時間。

その他参考ページ
[Unity3d] Update, OnGUI, FixedUpdate などの呼び出し順序
Unity におけるフレームと Update

以下のページは英語だけど、 Awake, Start, OnGUI, WaitFor* を使用している Coroutine等の実行タイミングも描かれたフロー図がとてもわかりやい
Unity3D MonoBehaviour Lifecycle

2014年5月7日水曜日

Unity : Animation の Wrap Mode を PingPong に設定する


このエントリーをはてなブックマークに追加
Stealth チュートリアルではまったのでメモ

WrapMode option not available in unity 4.3?

  • Warp Mode の設定がない場合は Inspector のメニュー(右の方にある下矢印+三本のライン)から Debug する
  • Animation Type を 1 に設定する必要がある

Unity で Asset Store に繋がらない場合の対処法


このエントリーをはてなブックマークに追加
参考:Unity Community Support -> Unity Support -> Asset Store Loading

Unity のチュートリアルを進めようと、アセットのダウンロードをしようとしたところ、
Asset Store のページは見れるものの、
個別のパッケージに進むと延々と Loading という状態になってしまいました。
公式ブログではプロキシやセキュリティについて言及していましたが、
自分の場合は上記のページを参考に、以下の手順で繋がるようになりました。

  • ログイン状態にする(Asset Store 右上のボタン)
  • 一度 Unity を閉じて再起動する
他にも管理者権限で起動すると繋がるようになった等の事例があるそうです。