【TechBuzz】第8回Unity技術勉強会 メモ
Unity勉強会の為に渋谷セルリアンタワーへ行って参りました。 http://togetter.com/li/380476 いい感じに実況ツイートや参考文献がまとまってるのでこちらもどうぞ。 こういうのって勝手にまとめていいの? と、ビクビクしながらまとめております。 また、あくまでメモなので解釈は個人責任でお願い致します。
アジェンダ -山村氏(テラシュールウェア )「Unity開発におけるアンチパターンの提案」 -田中 孝氏(CRI・ミドルウェア)「Unityサウンド入門編」と「サウンドワークショップ事例 」 -伊藤 周氏(Unityエヴァンジェリスト)「Unity開発における50のTipsのいくつか」 アンチパターンの提案 ◎9つのアンチパターン •スパゲティコード(component同士がぐちゃぐちゃになってる) →複雑な処理はマネージャを通す →定期的にリファクタリング(そのまえにバックアップを取る) •溶岩流 →会社古来のブラックボックス化されたコード
•ゴッドクラス(一つのクラスにたくさん機能をつめすぎる1000行とか?) →通信、データなどを詰め込みすぎるので、使い回しが出来ないコードになる →機能を分割し、カプセル化する →slideShareの「オブジェクト指向できてるか?」のスライドが役に立つ •万能ナイフ(全てのニーズに対応) →componentの機能が単体で独立するようにする →使われ方を絞って設計 →機能追加はcomponentを新たに作成して、それを追加しても他のcomponentが正常に動作するように設計する (NGUIみたいな感じでね!) •地雷原(テストをせずに開発する) →JUnit、NUnitなどユニットテストするソフトある (ユニットテストはあくまで予防接種) →リリース直後にバグって☆1を回避(リスク回避) →MonoBehaiviourならばUnityで用意されているSharpUnitやUUnitを使うのが良いかも •文章軽視化 →Unityは文章書かなくてもどんどん機能追加出来るので忘れがち (GameJamでもちゃんと書いて欲しい) →人の記憶力を過信してはならない →ドキュメント化が難しくても、最悪、付箋にメモ •自作固執(既にあるシステムを使わず、自作してしまい手間がかかる) →Excelでお絵描きとか、意味が分からない →レベルデザインやアニメーション設定なども、良い外部ツールがあったら積極的に使う。 →しかし、AssetStoreと同じ機能を自作した後に、本家のコードを見ると、とても勉強になる。
•砂上の楼閣(特定の開発環境や実行環境に強く依存する) →android,iOS,unity,xcodeのアップデートに会わせて開発 →一枚interfaceを挟むと対応が楽になるが、 instanceが一個増えるので、好みでやればいい。 →アニメーションをUnityでやるよりもblenderでやる方が早いなら、そちらを使うべき •ゴールデンハンマー(手持ちの技術ですべてを行おうとする) →エディター拡張ですべてを行うとか →ツールのアップデートに対応するのがキツくなってくる ◎最後に •アンチパターンを勉強するの大切、どの技術にもある。 •GameJamとかだと、ドキュメント書かない人が多い。 (どんなに小さい開発でもテスト&ドキュメントは、いる) サウンドプログラマ入門編 LogicProってサウンド作成ソフト使ってるよ! ◎サウンドプログラミング開発事例 •DAWのLogicPoで効果音、BGMを作った(波形ファイル=wavファイル) •波形編集にはaudacityを使った。エフェクトもかけれる •wavファイルは全てResources/soundに入れてる(SoundManagerも) •複数人開発だとSceneに置いてくれない場合があるので、自動生成にしてます(あとDontDestroyOnLoadしてる) •AudioClipとAudioSourceはAwakeでリソースから参照している •サウンド処理毎に関数を作ると運用しやすい •サウンド再生関数は音つくて無くても仮に用意しておく •グラフィカルに音のボリュームを見れるようにする •連続する時に音程やテンポを徐々に上げて行くと気持ちいい •たまに音のピッチをランダムにすると面白いかも •Updateで毎フレーム監視してる(BGM流れてなかったら再生や、台詞中だったらBGM下げるとか) •ダッキングしたりする •CRIADX2でもっと簡単にできるよ! •GameObjectは名前検索よりもタグ検索の方が早い(らしい) Unity開発50のTipsのいくつか •Unityだからこそ、開発には規則が必要 •どのシーンも実行可能にしておこう →テストやTry&Errerの時間を減らす(スタートからバトル画面にいちいち行くの面倒) →モックを作る (「LoginAgent=勝手にログインしてくれる」, 「Dbmock=仮のデータを引っ張ってくる」など) →シーン感で永続的にあるオブジェクトはインスタンスがあるか常に確認する •全てPrefabを使おう →インスタンスで特殊化してはいけない() →PrefabからPrefabにリンクしろ →出来る限りインスタンスは自動的にリンクしろ(Findしろ) →シーンを開かなくても編集出来る •monobehaiviourを拡張しよう →MyBehaviourというMonoBehaviourのサブクラスを他クラスに継承していこう (気に入らない関数(invokeとか)を改良したりして) •ゲームロジックとインターフェイスと切り離す(Playerに操作系を入れない) →キーレコーディングが可能になる →デバッグが楽になる →MVCパターン(分からないのでググってみました) •文字列の使用方法 →googleSpreadSheetから文字列読み込んでローカライズ出来るaseetがある •transformは1=1mとかで考えた方が良いかも(人のscaleとかも2とか、現実味のある値にしておく) •俺俺debugOption(自分だけのルールで書いたコード)のprefabを用意しておくと良いかも(コミットしないで保持 •Prefabの子もprefabにすると関係が切れる問題はunity4.1とかで解消予定) (3.5.6でiPhone5とかの対応もしたよ!) 感想 GameJamの時こそ、それぞれの俺仕様がプロジェクト内で爆発しかねないので、 2日間であってもチームで共有出来るドキュメントを用意すべきだと痛感。 Unityのアンチパターンについては、 そろそろ開発者が疑問に思う頃に今日発表が聞けたので いいタイミングで認識出来たなと思いました。 発表者、運営者の方々ありがとうございました!









