Resourcesフォルダーってダメなの?

土日がプロジェクト整理でまるっとつぶれたがびこです。

コードもついでに整理していたら、たまたまこんなのを見つけた。

#Resourcesフォルダー
https://unity3d.com/jp/learn/tutorials/temas/best-practices/resources-folder

2.1. Resources システムの推奨される使用方法
使用しないでください。

さっそくなのかァー

詳細はリンク先で簡潔にまとまっているのでいいとして・・・
うん、いやたしかに使いにくかったし嫌いだけどね。

Resourcesへの定数生成スクリプトの更新中に気づいて衝撃を受けた。
と同時にAssetBundleへの乗り換え準備をしてて助かったような気もした。

くさるほどたくさんあるエフェクトのコア部分がResourcesなのは・・・失策だったが・・・いろいろ多すぎて乗換が全然進んでなかったのだ。
>>パッチの適用をほとんど必要としないコンテンツである
はい、ごめんなさいクリティカルヒットです。

ところで、AssetBundleをアプリに含める方法はないかしら。
webからのDLはともかくAssetBundleの機能だけがほしい場合・・・

テーマ : Unityゲーム制作 - ジャンル : コンピュータ

筋肉って難しい

ようやく重い腰を上げて敵キャラモデリング始めました。
そしてしょっぱな人型の敵で思わぬ苦戦してます。

ローポリで筋肉って・・・難しいんだなぁ・・・
akaitouhou_20160911_ro-porikinniku.png
胸と腹のあたりはそこそこ満足。
腕はもうしらない。たぶんウェイト時に死ぬから余計な事しない。

スカルプトツールでは筋肉案外いけるかもって錯覚してたけど、ローポリで表現するには出したいところが分かってないとだめだった。
さくさくっと筋肉の目印かいてがりがりモデリングできる人がいかにすごいか・・・上の画像なんて結局丸一日すかってしまった・・・
そしてとりあえず雑魚一体2000ポリ以下に抑えたいなーと思いつつもうすでに3000超えている事実に軽く絶望しかけてた。

ま、まぁこいつそんな大きくないし?たぶん最終的には指はよくある人差し指~小指までをくっつけちゃう予定だから多少はね?

蛇足だけどもBlender, MayaLTを試したけど結局ローポリはメタセコでモデリングに落ち着いてしまった。アニメーションやテクスチャで結局色々使うんだけどね・・・

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

最近のUnity開発関連

最近リアルなワークが開発させまいとばかりに迫ってきます。
進捗の遅れは・・・日曜をフルに使って・・・ッ

さて、ではここ最近でのUnityで困ったこと、そして解決策をば。
※一部UnityというよりC#

■パーティクルの速度を管理したい

→ParticleSystem.Simulate(時間, true, false);
たとえばTime.deltaTimeで通常、deltaTime*0.5で1/2倍速になる。
後述するアニメーションの管理と同様の方法でこちらも指定時間化に。

■メソッドを指定時間後に実行して、さらにタイマーの管理も個別(TimeScaleを弄らない)に行いたい。ついでに複数記憶してたい。

経緯:攻撃処理で何秒後にエフェクトがでて攻撃判定がこのタイミングとこのタイミングで・・・とかやりたい。アニメーションにイベント登録が一番確実だけどアニメーションは使いまわすから専用モーションになってもらっても困る。コルーチンでもいいけどヒット硬直でのタイミングずれ考慮してコルーチン側も様子見るとか考えたくない。

→ある程度デリゲート用意しといて(EffectPlayとかPlaySEとか)指定時間後にぽいぽい勝手に吐き出すクラスを作成した。あと、スロー時とか硬直で停止にも対応できるよう、原則として登録元から時間指定で更新処理をしてあげる。
使うときは基本的に呼び出しタイミングと予約するメソッドを好きなだけ放り込んで、あとは好きな時間(物理かupdateかスロー中かとか)で進めてあげればいい。

具体的な例を挙げると↓な感じで予約
(0.5秒後にEffectPlay関数を呼ぶ)
//エフェクト予約
this.onEventAction.AddEffectPlay(this.EffectPlay, 0, ref this.m_EffectManager, 0.5f);

物理でも描画でも好きなステップで更新処理をする
this.onEventAction.UpDate(Time.fixedDeltaTime);

Time.fixedDeltaTimeに0.5かければスロー中、みたいなことも可能
書いてて気づいたけどこれAdd系関数複数いらぬわ。オーバーロードでいい。さらにいうならActionでいいじゃないかこれ。
本来なら読んだ先の管理も考えるなら自前の時間管理をすべし。

ま、まぁうまく管理する人ならコルーチンでもなんでもうまくやるのかもしれないけど、今回はなるべく目に見える管理&未来の他言語移植も考えて。

■指定時間アニメーションをスローや加速、停止したい

this.animator.speed = speed;
//指定時間後に元に戻す
StartCoroutine
(
         //指定時間後に実行するコルーチンさん
this.DelayMethod( 戻すまでの時間, () =>
{ this.animator.speed = 1f; }
)
);

以上。さっそく上で書いたことと矛盾していくスタイル。
いつか自前の時間管理にするから、きっと、たぶん。

・・・最近なんかこう、露骨にモデリングから逃げてる。
管理部分や基底クラスは充実する一方だけど、新しいモデルは一切できてこないっていうね。モデリング面倒くさくてきらいなんじゃ・・・

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

Unityで実機デバッグができない・・・

今までできていたのか、そうでないのかも思い出せない。
しかし今確実に、Android実機でデバッグができない

■状況整理
・Unity 5.3.2f1 (64-bit)
・VisualStudio2015
・Development Build と ScriptDebugging にチェック済み
・VisualStudio→デバッグ→AttachUnityDebuggerに端末名が表示される(wifi接続時)

■できること
・UnityのProfilerでAndroidの状態を確認可能
・wifi経由でもusb経由でもアプリのインストールは可能

■出来ないこと
VisualStudio→デバッグ→AttachUnityDebugger→端末名を選択しても、デバッグが始まらない

気づいたのは、AssetBundleのテスト中。
よくある「初回起動時にwebからデータを落として展開する」というやつを試していたところ、どうやらPCとAndroidで保存できる場所、読み取れる場所に違いがあることが判明。
正しい条件がわからないため、どこをどう参照したときにダメなのかを検証したくて、ステップ実行でちょこちょこ試そうとしたところ判明。

けっこうこれは面倒だぞ・・・
なんとかならないものか・・・

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

敵やプレイヤーの管理はどうすべきか・・・

ゲーム開発、モデリングやスキル、モーション等のパーツ作りがある程度進められるようになってきて、なかなかに楽しくなってきました。

しかし、快適に進んでいるかというとそうでもなく・・・
ある程度数が増えてくると、管理や制御の仕方と気にする必要が出てくる。

例えばサンダーという魔法は、こんな感じだとします。

・攻撃倍率:1.5
・消費MP:20
・属性:雷
・詠唱時間:1.5秒

まぁ普通だったら、きっとスキルの基底クラスを作成し、それを継承したサンダーの魔法用のクラスでもつくるんでしょうか。
あとはプレイヤーや敵に使用できるスキルリスト的な配列を設けておいてそこにサンダークラスを生成すれば、あとは行動パターンで制御、と。
なるべく共通化したいから、サンダー魔法中の処理はプレイヤーでも敵でも同様の処理で制御できるとクッドですね。
結構クラシックな方法だけど、割とこれでいけます。

問題は、結構なハードコーディングになるからバランス管理が難しいし、なにより敵が増えるたびに似たようなことを毎回書かなきゃいけないこと。
ある程度避けようがないところもあるけど、綺麗に管理したい。
あとはロジックを視覚的に管理したいし、さっきのスキルもドラッグするだけで「ここはこのスキル」みたいな感じで組み立てたい。
そう、例えば・・・mecanimのような・・

というわけで、視覚的にロジックを組み立てられて外側だけでもコードが自動生成されるようなのを探してたら、いくつかすでにあるのね。
こういうのが自前に作れるようになれたらなぁ・・なんて

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

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