凛(kagring)のUE4とUnityとQt勉強中ブログ

2016 年から UE4 を触り始めました。勉強したもののメモ用のブログです。C++ での Qt、Unity も少しあります。

2013年12月 | ARCHIVE-SELECT | 2014年02月

| PAGE-SELECT | NEXT

≫ EDIT

非同期でシーンを遷移する

Unity でシーンを非同期で切り替える方法です。
Pro 版のみ使える機能を使っています。

・LoadLevelAsyncをつかってシーンの非同期読み込みをする
http://masayuki5160.hatenablog.com/entry/2014/01/21/235641

ここらへんを見ながらやっていたのですが
どうもかつかつ止まってしまっていたりして、結局コルーチンにすることで解決したのですが
あってるんでしょうかこれ…。

・Application.LoadLevelAsync
http://docs-jp.unity3d.com/Documentation/ScriptReference/Application.LoadLevelAsync.html

リファレンスはこんな感じに。
こういった感じでコルーチンの中で実装したらうまくいったようです。



ちょっとかつかつしたりしてますがこんな感じに。
スポンサーサイト

| Unity | 01:45 | comments:2 | trackbacks:0 | TOP↑

≫ EDIT

スクリプトの関数の実行順

Unity でスクリプトを書いた時の関数の実行順です。
関数のタイミングですね。

・イベント関数の実行順 / Execution Order of Event Functions
http://docs-jp.unity3d.com/Documentation/Manual/ExecutionOrder.html

普通に何かやってるぶんには「Start」「Update」「OnGUI」ぐらいで大丈夫だと思います。

ボーンのモーション再生後の制御では「LateUpdate」
アクティブ切り替えた時には「OnEnable」
初期化とかそこら辺の時には「Awake」

あたりを覚えておくとよいのかなと思いました。

| Unity | 01:01 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

OnGUI での描画順制御

Unity でスクリプトで OnGUI を書いた時の描画順です。
ロードマークだったり、トランジションだったりの描画順はどうやったらいいのかなーと思って
いろいろ調べてみました。

・OnGUIでの描画とイベント処理の順番
http://ny.hateblo.jp/entry/20120714/1342247186

どうも「GUI.depth」の値が大きい順に描画されるみたいですね。

・GUI.depth
http://docs-jp.unity3d.com/Documentation/ScriptReference/GUI-depth.html

というわけで使ってみたところ、最前面にロード表示を実装することができました。

ロード表示

黒画面なのでわかりづらいですが…(苦笑

| Unity | 23:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

Unity2D のスプライトで GUI

折角 Unity2D というのが増えたので UI をスプライトを使って作ろうと思いました。
よし、表示できた! というところでこんなものを見つけました。

・Unity2DとNewGUIについて
http://www.slideshare.net/keigoando/unity2-dnew-gui


ここで Unity2D のスプライトは GUI には使わない方が良いと書いてありました…。
というわけでまた違う方法を探してみようかと思います!

NGUI を使えという話もありますが、勉強のため有料のアセットはなるべく使わない方向で…

| Unity | 00:56 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

スクリプトからシェーダーパラメータを変更する

Unity でシェーダーのパラメータをスクリプトから変更する方法です。
マテリアルを取得する方法が以下でわかりました。

・マテリアルの取得
http://kagring.blog.fc2.com/blog-entry-35.html

このマテリアルにはシェーダーがセットされているので
マテリアルからパラメータのセット関数を呼ぶだけで反映されます。


// シェーダーパラメータのセット
GameObject gameObject;
gameObject.renderer.material.SetFloat("_WaveScale",0.5f);


上記のは水のシェーダーに対して「_WaveScale」のパラメータに「0.5f」を入れています。

こんな感じでシェーダのパラメータ名がわかれば簡単にアクセスすることができます。

ここらへんを参考にしました。

・Material.SetFloat
http://docs-jp.unity3d.com/Documentation/ScriptReference/Material.SetFloat.html

| Unity | 02:48 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

マテリアルの取得

Unity でゲームオブジェクトの中にはいっているマテリアルを取得する方法です。

とはいえ難しいことはなにもなく、

// マテリアルの取得
GameObject gameObject;
Material material = gameObject.renderer.material;


といった感じで取得できます。

複数のマテリアルを持っている場合は

// 全てのマテリアルを参照
GameObject gameObject;
for(int i = 0; i < gameObject.renderer.materials.Length; i++ ){
// マテリアルの取得
Material material = gameObject.renderer.materials[i];
}


といった感じでアクセスできるようです。

シェーダーへのアクセスもマテリアル経由で行う見たいですね。

| Unity | 02:57 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

アニメーションの再生

Unity でアニメーションを再生する方法です。

これは結構簡単で Animation を持つオブジェクトに対して


// idle という名前のモーションの再生
this.animation.Play("idle");


といった感じでできました。
自分は FBX からのモーションを適用したのですがなんて簡単な!

ちなみに、モーション再生中のものから違うモーションへの補間はこんな感じでできるそうです。

this.animation.CrossFade ("walk");



こちらも結構簡単ですね。
まだ使ってはいないのですが、この補間はフレームとか割合とか指定できるのでしょうか…。
詳しく調べないとかなと思っています。

| Unity | 02:53 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

ラグドール(Ragdoll)を使ってみた

物理が使えるようになったので次はラグドールを実験してみました!
アサシンクリードやFPSでの死亡時の糸の切れた人形みたいな動きをするあれですね。

というわけで今回も他のサイトさんにお世話になりました。

・[Unity3D]かっこ良く死ね! Ragdoll
http://tsubakit1.hateblo.jp/entry/20121030/1351608256

ここを見ながら設定をしました。設定自体はうまくできたのですが挙動が上手くいかない…。
というわけで実際の手順の動画をみてやってみました。

・Unity 3D Ragdoll Easy Tutorial
http://www.youtube.com/watch?v=dCwNaE_eVsM


どうも自分が勘違いしていたのが、ルートになるのはモデルのルートなのかなと思ったのですが
ボーンの集約する一番の親。だったみたいですね。
腰だったり尻だったりセンターだったりするボーンです。

というわけで動画を見ながら設定してみたものがこんな感じです。


いい感じにラグドールになったのではないでしょうか。
キャラによっては頭の大きさにあたりがうまくあってなかったりするみたいなので調整しましょう。
中身は RigidBody とコリジョンがあるだけなので調整はしやすいのではないかと思います。

| Unity | 04:32 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

MovieTexture による動画の再生(GUI)

とりあえず今までやっていたことでわかりやすいところとして
2Dでの動画の再生をテストしてみました。
サークルロゴは動画で毎回やっていたので…。

ここらへんを参考に作ってみました。

・[Unity]Unityでムービー再生
http://d.hatena.ne.jp/yos316/20111118/1321554202

・Playing videos in the GUI
http://answers.unity3d.com/questions/11178/playing-videos-in-the-gui.html

結構簡単で動画ファイルをプロジェクトに追加して
MovieTexture にセットし、Play() 命令をかけてあげるだけで実装できました。


// ループの場合は true
movieovieTexture.loop = false;
// 再生
movieovieTexture.Play();


描画の部分は

//OnGUI で描画
GUI.DrawTexture(new Rect(0, 0, movieovieTexture.width, movieovieTexture.height), movieovieTexture);


こんな感じで描画できました。
GUI.DrawTexture は重いかなと思ったのですが、特に動画しか描画しない場合は大丈夫な気がします。

動画でひっかかったのが、mp4 なども再生できるとのことだったので
PV とかに使っていた動画を引っ張ってきたのですが駄目でした…。
割とここらへんはおとなしく「mov」ファイルを使うのが良いのではないかなと思います。

というわけで無事再生できました。静止画だとわかりづらいですが(苦笑)
動画再生

| Unity | 04:24 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

シーンを切り替えても削除されない GameObject

スクリーンショットとるスクリプトをアタッチしたゲームオブジェクトが
タイトル→ゲームと移行したら消えてしまったので…。
まあ、これについてはシングルトンが良いのではないかと思ったのですが一応こんな方法でも。

・Unityで、シーンを切り替えてもオブジェクト(情報)を引き継ぐ方法
http://blog.livedoor.jp/tetomemo/archives/9963291.html

とりあえずスクリプトで自身がアタッチされてるゲームオブジェクトに対して行うには


DontDestroyOnLoad( this.gameObject );


という記述で消えない GameObject になるようです。

何か残したいものがある場合は使うとよいかもですね。

| Unity | 01:40 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT | NEXT