とてもまずいリーク

前々回の記事で作成した剣の軌跡エフェクト
おそらくこれが原因でとんでもないことになった。

Unity起動~

ちょっとお風呂いってこよう

ふー、あれ、Unityがぴくりとも動かない・・

Unityメモリ使用4GB()

数十分の間にとんでもないメモリリークしてやがった・・・

さて当然原因を探るわけですが
.SetDestroy(time);
という具合に、軌跡メッシュに削除時間を指定
Destroy(gameObject, time);
という具合に指定された時間で消滅する
ヒエラルキーからもちゃんと消えていくのがわかる。
が、やっぱりリークしている。

いろいろ調べてみたところ、どうやらマテリアルはgameObjectをDestroyしても残り続けるらしい。こいつはやばいので早速破棄・・
が、駄目っ・・!
さらに調べてみると、動的に生成されたメッシュもまずいらしいので、早速().Meshを破壊する処理を追加する・・
が、(ry

しかし、困り果ててソースを見ているとあることに気づいた。
obj.GetComponent().sharedMesh = obj.mesh;

そう、つまり消すべき対象はこいつだ
gameObject.GetComponent<MeshFilter>().sharedMesh

・・解決!
少し目を離したすきに数GB持っていく最悪なゲームから解放

最近Unityがやたらクラッシュしてイライラしていたのだけど、実は自分のせいだったっていうね。とにかく、今回学んだことをわずれずに進もう。



拍手3件と3件ありがとうございます!

テーマ : ゲーム - ジャンル : ゲーム

unity用シェーダ一応完成?

地形用最終版(いちおう)シェーダ完成
ss.jpg
なぞの立体感のある岩肌シェーダと、デフォのレンダリングによくある・・なんていえばいいの?影とか光とかがきつかったのを修正したのがメイン。
ただ見ての通り?決して軽くはないので、モバイルで動かす場合には普通にテクスチャ2枚とマップ・・いや、合成これ本当にできるか?

環境設定はかなり柔軟に設定できるようするつもりだけど、いまだマテリアルの設定変更は一切できないので、いちいち設定しなおすしかない。
導入する方法はわかっているし、よさげな案もあるんだけど、まず変更以前にマテリアルを複数作成済みのオブジェクトがないっていう。

作業量が多すぎてやってられないんだぜ・・

テーマ : ゲーム - ジャンル : ゲーム

剣の軌跡作成

Unityでも動的に剣の軌跡を生成できないだろうかと実験

https://sites.google.com/site/puredetaanosouko/
こちらのモデルをお借りしました。
モーションは自前のものを流用。

slashcheck.jpg
出てますね。 バッチリです。
手元がおかしいのは姐さんに剣用ボーン入れてないからです。

別モーションでテスト
slashcheck2.jpg
ちょっとカクっとしてますね。
ただ、原因も修正(改善)する方法はわかっているので気にしない。

別アングルからエフェクト付きで
slashcheck3.jpg

Player→EffectManager→SlashManager→MeshManager
→SlashManager→...
→...
こんな感じの管理体制
複数の軌跡を同時に出すとか、プレイヤー以外も使うかもとか考えてたら、根がどんどん深くなっていくせいで扱いが結構シビアに。
なので、テストにはあんまりよくはないけど「生まれた瞬間からいずれ必ず死ぬ」よう設定しておく。臨時の処理ってことで!



拍手2件と2件ありがとうございます。

テーマ : ゲーム - ジャンル : ゲーム

Unityのアニメーション制御

モーションをフェードしながら再生している場合、再生が終了したかどうかの判定が難しい。

例えば、攻撃モーションが1.0f(終了)になったら歩きモーションに戻したいとする。
となると
if(this.AnimTime > 0.99f)
こんな風にしたいのだが・・・
アニメーションの再生時間を監視してみると

歩きモーション時間 n.7f

の時攻撃モーションへ移行しようとすると、アニメーションをブレンドしながら攻撃に移るためか、まず歩きが

0.7f→1.0f (%1.0f)

となった後に、攻撃モーションの時間が

0.3f→1.0f (0.3fは歩きの時間で既に進んでいる)

というように移動していく。
つまり、上のif(this.AnimTime > 0.99f)の判定に歩きの段階で入ってしまい、モーションがすぐに移行してしまう。

もう一つ、ループアニメーションでもないのにnormalizedTimeの値が増え続けるのはおかしいだろうと思いました。
レファレンスには
 AnimatorStateInfo.normalizedTime
 ステートの正規化された時間
 整数部分は、ステートのループ回数です。少数部分は現在のループでの位置を % (0-1) で示します。
http://docs.unity3d.com/jp/current/ScriptReference/AnimatorStateInfo-normalizedTime.html

とある。
これの文章からするとループしなければ整数部は増えなそうなのに・・なんでやねん!

で、結局たどり着いたのはイベントと、今まで使っていた方法である再生時間を自前で操作して制御する方法の二つ。

前者は自動で呼ばれるためとっても簡単
例えば終了時に設定しておけば勝手にしかるべき処理をする。

一方で後者はアニメーション時間をすべて把握している必要があり、扱いが困難(実際前作はこれだったけど死ぬほど面倒でした)
もしアニメーションの総時間をスクリプトから取得をしようにも、上記のブレンドのせいでなんの総時間が帰ってくるかまったく保障できない。
ただ一方で、長所もある。
前者はある1点にイベントを設置するのに対して、こちらはアニメーション再生時間を範囲で指定することができる。
たとえば走り出して少しの間(0.0f-0.2f)は移動速度が遅い、とか。

他にも平行してプレイヤーの行動を作り込んでます。

正直、簡単にゲームができちゃいそうな雰囲気がUnityの嫌いなところだったけど、作り込もうとすると途端にディープで好みなエンジンになった。
やっぱりプログラム書いてるときが一番楽しい。

テーマ : ゲーム - ジャンル : ゲーム

いろいろ実験中

モデルを改善&Unity向けに最適化
newtree.jpg
この木はだいたい300ポリくらい。
作りは正直適当。枝も全部ぶっさしでUV展開は円柱のまんま
よくみ・・なくてもUV座標一部壊れてるけど、たぶん私のせい。

とりあえず手元にある素材を並べまくる
treeputs.png
手前にあるデカイのが、今のところ一番出来がいい木。
テクスチャやマテリア設定を一新、すごくいい感じに。幹って感じが出てきたんじゃないでしょうか。あとは葉っぱだな・・
奥の妙に明るいやつは上の画像の木。異常な発光はともかく、やっぱりこう並べちゃうと嘘くさいし適当さがにじみ出ている。

スマホで動かすことを考えたら、木はやっぱり数百ポリ以内だよなぁ・・

テーマ : ゲーム - ジャンル : ゲーム

Unity進歩状況

新しいシェーダをいくつか作成し、全体的に描画関係を改良。
なんだか難しそうだから敬遠してたけど・・HDRつよし。

キャラクターの動きもアナログに対応。
管理クラスもかなり出来上がってきました。
あとは、自前の入力管理をつくって、キーボ&パッド or タッチのどちらにも対応できるようにすれば、いよいよスタートというわけです。

あとはグラフィック作成する体力があるかどうか・・



拍手一件ありがとうございます

テーマ : ゲーム - ジャンル : ゲーム

Unityの物理とモデル

ここ最近、割と熱心にUnityの勉強をしてました。
やっぱり触り続けていると慣れてくるもので・・気が付くと普通に使えるようになっていたもんだから面白い。

・・しかし、なかなか解決しない問題もあったりする。

ひとつはカメラに追従して動くエフェクトが、カメラが少しでも動くとその動き以上に座標が動いてしまうこと。
はじめは実行順序の問題だろうと思いどうにかなるだろうと考えてたけど・・思ったより手ごわい。
→ビルドしたら治ってた。どうやらエディタ上だとダメらしい?

ふたつに、物理演算付きモデルの座標移動
走ったりジャンプさせたりしたいわけだが、少しでも座標を動かせば、台風中継の時のような強風にあおられる。
スカートなら全く有りがたくもないし求めてもいないサービスをしだし、髪はオールバックになる、どうすればええんや!
重力加速度を変えたりモデルの角度制限をしたりといろいろ試したいことはあるけど、とくに後者は正直やりたくはない。

モデルの移植が完璧にできれば色々できるんだけどなぁ・・

テーマ : ゲーム - ジャンル : ゲーム

リンク
報告
20150405 新カテゴリ追加
月別アーカイブ