Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ソース管理gitを導入
gitについて話し始めると
日が暮れてしまうので
Gitとは・・・
プログラムのソースコードなどの変更履歴を記録・追跡する
ための分散型バージョン管理システムである。
環境
・BitBucket
GitHub同様リポジトリを預かってくれるホスティングサービス。
ユーザー数に応じて料金が発生するが、5人までは無料で利用でき、
リポジトリ数が無料で無制限に作成可能。
・SourceTree
BitBucketと同...
なぜこの組み合わせ?
Unityでの開発は本来チーム全員がUnityを触る事を理想としているらしい。
つまり、デザイナーはUIやアニメーション作成、プランナーはゲームバランスの
調整等を行い、サウンドはBGMやSEのMixをUnityで自ら行う...
①Bitbucketの登録 https://ja.atlassian.com/software/bitbucket
アカウント取得しログインすると
右のような画面(Dashboard)に来ます。
②SourceTreeのインストール https://ja.atlassian.com/software/sourcetree/overview/
インストール後にアカウント追加を
聞かれたら先程作成したBitbucketの
アカウントを追加す...
③SSHキーの作成
・SourceTreeで[SSHキーの作成/インポート]を選択
・[Generate]をクリックし、この辺↓↓をマウスでぐりぐりドラッグする
・作成されたKeyに名前・パスワード情報を入力する
[key Comment]
わかりやすい名前
[key passphrase]
[Confirm passphrase]
設定したいパスワード
・keyデータを保存する(3つ)
・[Save public key]をクリックして保存
・[Save private key]をクリックして保存
・[Public key for pasting into OpenSSH authorized...
④SourceTreeにSSHキーの登録
・SourceTreeの[SSHエージェントを起動]を選択
・隠れてるインジケータ内の[Pageant]を右クリック、[View Keys]を選択
・[Add Key]をクリック
・先程保存した[Save private key]の方を選択、パスワードを入力する
・Bitbucket右上のユーザーアイコンをクリック、[Bitbucket settings]を選択
⑤BitbucketにSSHキーの登録
・左下の[SSHキー]を選択
・[鍵を追加]を選択
[Label]
わかりやすい名前を入力
[Key]
先程テキストコピーして保存した
[Public key for pasting into OpenSSH authorized_keys2 file:]の
テキストをコピ...
⑥Bitbucketに新規リポジトリを作成
・Bitbucketにログイン
・[リポジトリの作成]選択
・[リポジトリ名]を入力
・リポジトリタイプはGit
・リポジトリ作成を選択
⑦SourceTreeでPCにクローン
・SourceTreeにクローンを選択
※保存されてるプロジェクトによってはクローンに時間がかかる場合は
SSHではなくHTTPSでクローンすると比較的早くできます。
・[保存先のパス]を設定
※ローカルPCの保存先
・クローンを選択
※クローンの際にフォルダが空じゃないと怒られるので注意
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
# Autogenerated VS/MD solution and project files
*.csproj
*.unityproj
*.sln
*.s...
基本用語
・ブランチ
バージョンの分岐のこと
・フェッチ
リモートリポジトリの更新履歴のみ取得
・プル
リモートリポジトリ変更をローカルリポジトリに反映
・コミット
ファイル等の変更をローカルリポジトリに反映
・プッシュ
ローカルリポジトリの変...
ローカルPC1
ローカル
リポジトリ
プッシュ
プル
ローカルPC2
ローカル
リポジトリ
※イメージ
コミット
プッシュ
Bitbucket
コミット
リモートリポジトリ
・むやみにSceneの保存はダメ絶対
・同じSceneは複数人で同時作業しない
・同じSceneで作業する場合はPrefab単位で作業を行う
・Prefabの編集はApply→SceneSave→Scene(.unity)をロールバックが基本
...
UGUI Topics(入門編)
・画面サイズに合わせた設定(CanvasScaler)
UIを作っていく際に、最初にするであろう複数端末の解像度に合わせる設定
HD(1920×1080)iPhone6(1334×750)iPhone5s(1136×640)
Screen Space - Overlay
UIなど最前面に持ってきたい場合に使用
Screen Space - Camera
他のオブジェクト同様にカメラに映す場合に使用
Canvas
・RenderMode
World Space
他のオ...
・Reference Resolution (リファレンスとする画面サイズ)
Canvas Scaler
・UI Scale Mode (UI要素の拡縮方法を決定)
・Screen Match Mode (アスペクト比がリファレンスと違う場合の...
・ボタンのタッチエリアを広げる
いろいろ調べた結果、最も手軽に実現できたのが
子要素に透明なImageを置く事です
ボタンImageより広い範囲で
クリックイベントを反応させたい場合
NGUIではUIButtonのコライダー範囲を設定していた
...
・スクロールビュー
①スクロールさせる子要素(セル)を作成する
②スクロールビューの親となるScrollRectを作成
④Maskの子にLayoutGroupを作成する
⑤LayoutGroupの子にスクロールさせる子要素を追加していく
③Sc...
①スクロールさせる子要素(セル)を作成しPrefab化する
・UIのButtonを作成
・Prefab化する
←Imageを使ったButtonが
よく使われる
実際は子にText等使う→
・スクロールビュー
①スクロールさせる子要素(セル)を作成する
②スクロールビューの親となるScrollRectを作成
④Maskの子にLayoutGroupを作成する
⑤LayoutGroupの子にスクロールさせる子要素を追加していく
③Sc...
ハイ出来上がり!
②右クリックメニューかComponentメニューの UI>ScrollViewを選択
┗ Content スクロールさせる子要素を入れる
・ScrollRect スクロールビュー機能
┣ Viewport 見える範囲
┣ Sc...
実演を交えて調整の一例
・不要なスクロールバーを削除
・ScrollViewの[RectTransform]で範囲設定
・ScrollViewの[Image]で背景設定
・ScrollViewの[ScrollRect]でスクロール動作設定
・ス...
※後工程を思いやり、UIを作る際に留意すること (小話)
・Prefab化する際はアタッチ漏れを確認
・Prefab外の参照は最小限かつシンプルに
・作成後は必ず各対応予定の端末画面比で確認する
Multi Scene Editing(複合舞台編集)
Sceneの呼び出し方 が変わった
Application.LoadLevel(“scene1”)
Application.LoadLevelAdditive(“scene2”)
Application.UnloadLevel(“scene3”...
Application
Application.LoadLevel()
Application.LoadLevelAsync()
Application.LoadAdditive()
Application.LoadAdditiveAsync(...
Hierarchy(ヒエラルキー) が変わった
こんな感じ
・変更点があるSceneにはアスタリスク(*)が表示される
・アクティブなSceneは太字で表示される
ショートカットでのオブジェクト追加や右クリックメニューでの
動作などはこのシーン...
再生中のHierarchy(ヒエラルキー) が変わった
・DontDestroyOnLoadが表示されるようになった
・アタッチされていた参照は切られない
・GameObject.Findでの取得は可能
まずは全Sceneの土台となるSceneを作成しよう
・MainCameraを設置する (TagがMainCameraのもの)
・EventSystemを設置
・主にSceneManager、AudioManager、GameManager等の...
各Scene作成時にまず行うこと
・Cameraをメイン以外にする (CommonSceneのと被ってエラー吐きます)
・CameraのClearFlags設定 (通常はDepthOnlyですかね)
従来のマルチカメラと同様の設定を行う
・Ca...
各SceneでUGUIを使い始める時にまず行うこと
・EventSystem削除する (Hierarchyに一つだけ)
・Canvasの設定 (Depthとか)
・CanvasScalerの設定 (設定解像度を合わせる)
未来予想
・マージの際に競合しないで済む
・Prefab単位からScene単位での編集・管理にシフト
・UIや機能毎にScene単位で分割
・複数のSceneを一つのSceneに後から結合する事も簡単
・Sceneの加算合成が増えて管理は大変に...
Unity小話
・Assets直下のフォルダ階層を工夫した方がいい
理由
→アセットストアからダウンロードしたりすると問答無用で階層を作られる
→Script、Scripts、scriptなんて階層が並び始めたらもう目も当てられない。。。
個人的オススメ
Ed...
・可能ならアップデートする
理由
更新頻度が高くバージョンアップの度に様々な機能が実装されるため、
保守的に放置するとすぐに陳腐化が進む。
ググって出てきた一年前の記事の内容で動かないなんてのはよくある話
例:Unity5.0よりAudioMi...
ご清聴ありがとうございました
複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウ
複数人でのUnity開発ノウハウ
Upcoming SlideShare
Loading in …5
×

複数人でのUnity開発ノウハウ

5,478 views

Published on

チームでUnityでの開発を行う際の基本的なノウハウについて勉強会用に作成した資料です。

Published in: Technology
  • Be the first to comment

複数人でのUnity開発ノウハウ

  1. 1. ソース管理gitを導入
  2. 2. gitについて話し始めると 日が暮れてしまうので Gitとは・・・ プログラムのソースコードなどの変更履歴を記録・追跡する ための分散型バージョン管理システムである。
  3. 3. 環境 ・BitBucket GitHub同様リポジトリを預かってくれるホスティングサービス。 ユーザー数に応じて料金が発生するが、5人までは無料で利用でき、 リポジトリ数が無料で無制限に作成可能。 ・SourceTree BitBucketと同社のAtlassianが提供しているgitクライアント GUIでの簡単な操作でgitを扱える。 ・Unity おなじみのUnityさん
  4. 4. なぜこの組み合わせ? Unityでの開発は本来チーム全員がUnityを触る事を理想としているらしい。 つまり、デザイナーはUIやアニメーション作成、プランナーはゲームバランスの 調整等を行い、サウンドはBGMやSEのMixをUnityで自ら行うということです。 簡単かつ分かりやすく、GUIで操作できることが必須かと コマンド打って~とか。。。 エンジニア以外の方には優しくないですよね (私も嫌です) 両環境ともAtlassian製の為、親和性と拡張性の高さがウリ!! JIRAの連携も即可能なので、後にアジャイル開発を目指すならオススメ つまり、全員がソース・ファイルのバージョン管理が必須
  5. 5. ①Bitbucketの登録 https://ja.atlassian.com/software/bitbucket アカウント取得しログインすると 右のような画面(Dashboard)に来ます。
  6. 6. ②SourceTreeのインストール https://ja.atlassian.com/software/sourcetree/overview/ インストール後にアカウント追加を 聞かれたら先程作成したBitbucketの アカウントを追加する その後のリポジトリクローンはスキップしてしまってOK (まだ作ってないので。。。)
  7. 7. ③SSHキーの作成 ・SourceTreeで[SSHキーの作成/インポート]を選択 ・[Generate]をクリックし、この辺↓↓をマウスでぐりぐりドラッグする
  8. 8. ・作成されたKeyに名前・パスワード情報を入力する [key Comment] わかりやすい名前 [key passphrase] [Confirm passphrase] 設定したいパスワード
  9. 9. ・keyデータを保存する(3つ) ・[Save public key]をクリックして保存 ・[Save private key]をクリックして保存 ・[Public key for pasting into OpenSSH authorized_keys2 file: ]の内容をテキストコピーしてメモ帳等で テキストデータとして保存(コレ重要) ※保存するファイル名は何でもOK
  10. 10. ④SourceTreeにSSHキーの登録 ・SourceTreeの[SSHエージェントを起動]を選択 ・隠れてるインジケータ内の[Pageant]を右クリック、[View Keys]を選択
  11. 11. ・[Add Key]をクリック ・先程保存した[Save private key]の方を選択、パスワードを入力する
  12. 12. ・Bitbucket右上のユーザーアイコンをクリック、[Bitbucket settings]を選択 ⑤BitbucketにSSHキーの登録 ・左下の[SSHキー]を選択
  13. 13. ・[鍵を追加]を選択 [Label] わかりやすい名前を入力 [Key] 先程テキストコピーして保存した [Public key for pasting into OpenSSH authorized_keys2 file:]の テキストをコピペする
  14. 14. ⑥Bitbucketに新規リポジトリを作成 ・Bitbucketにログイン ・[リポジトリの作成]選択 ・[リポジトリ名]を入力 ・リポジトリタイプはGit ・リポジトリ作成を選択
  15. 15. ⑦SourceTreeでPCにクローン ・SourceTreeにクローンを選択 ※保存されてるプロジェクトによってはクローンに時間がかかる場合は SSHではなくHTTPSでクローンすると比較的早くできます。
  16. 16. ・[保存先のパス]を設定 ※ローカルPCの保存先 ・クローンを選択 ※クローンの際にフォルダが空じゃないと怒られるので注意
  17. 17. /[Ll]ibrary/ /[Tt]emp/ /[Oo]bj/ /[Bb]uild/ # Autogenerated VS/MD solution and project files *.csproj *.unityproj *.sln *.suo *.tmp *.user *.userprefs *.pidb *.booproj # Unity3D generated meta files *.pidb.meta # Unity3D Generated File On Crash Reports sysinfo.txt # UnityVS (Tools for Unity) /Assets/UnityVS/ /Assets/UnityVS** /UnityVS.client.sln.DotSettings ⑧SourceTreeのignoreを追加 ・右上辺りの[設定]を選択 ・リポジトリ設定画面の[詳細]タブを選択 ・リポジトリ固有無視リストの[編集]を選択 ・表示されたテキストを編集し保存 ・リポジトリ設定画面のOKを選択 Ignoreファイル記載例 →
  18. 18. 基本用語 ・ブランチ バージョンの分岐のこと ・フェッチ リモートリポジトリの更新履歴のみ取得 ・プル リモートリポジトリ変更をローカルリポジトリに反映 ・コミット ファイル等の変更をローカルリポジトリに反映 ・プッシュ ローカルリポジトリの変更をリモートリポジトリに反映 ・マージ 他のブランチの内容を統合 A B C L X Y D リリース版 バグ修正版 新機能版
  19. 19. ローカルPC1 ローカル リポジトリ プッシュ プル ローカルPC2 ローカル リポジトリ ※イメージ コミット プッシュ Bitbucket コミット リモートリポジトリ
  20. 20. ・むやみにSceneの保存はダメ絶対 ・同じSceneは複数人で同時作業しない ・同じSceneで作業する場合はPrefab単位で作業を行う ・Prefabの編集はApply→SceneSave→Scene(.unity)をロールバックが基本 ・もしSceneで衝突した場合は「相手の変更で解決」が基本 ※マージでなるべく競合しない平和的運用のなんたら(小話) ・AssetSerializationをForceTextにするとmeta等のバイナリをテキストで 確認でき、ちょっとしたパラメータ変更等はマージが可能になる。 ただし、容量が大きくなってしまう事とエラーが発生するケースが確認され てるのでデフォルトのMixedのままが良いという噂も。。。
  21. 21. UGUI Topics(入門編)
  22. 22. ・画面サイズに合わせた設定(CanvasScaler) UIを作っていく際に、最初にするであろう複数端末の解像度に合わせる設定 HD(1920×1080)iPhone6(1334×750)iPhone5s(1136×640)
  23. 23. Screen Space - Overlay UIなど最前面に持ってきたい場合に使用 Screen Space - Camera 他のオブジェクト同様にカメラに映す場合に使用 Canvas ・RenderMode World Space 他のオブジェクト同様にカメラに映す場合に使用 ★ ★
  24. 24. ・Reference Resolution (リファレンスとする画面サイズ) Canvas Scaler ・UI Scale Mode (UI要素の拡縮方法を決定) ・Screen Match Mode (アスペクト比がリファレンスと違う場合の拡縮方法) Expand (端末の画面に収まる様に拡縮してくれる) Scale With Screen Size 画面サイズに合わせてUI要素を拡縮してくれる iPhone5sなら 640×1134 iPhone6なら 750×1334 HDなら 1080×1920
  25. 25. ・ボタンのタッチエリアを広げる いろいろ調べた結果、最も手軽に実現できたのが 子要素に透明なImageを置く事です ボタンImageより広い範囲で クリックイベントを反応させたい場合 NGUIではUIButtonのコライダー範囲を設定していた Buttonの子要素に入れたImageはすべて反応します
  26. 26. ・スクロールビュー ①スクロールさせる子要素(セル)を作成する ②スクロールビューの親となるScrollRectを作成 ④Maskの子にLayoutGroupを作成する ⑤LayoutGroupの子にスクロールさせる子要素を追加していく ③ScrollRectの子に表示範囲を決定するMaskを作成する
  27. 27. ①スクロールさせる子要素(セル)を作成しPrefab化する ・UIのButtonを作成 ・Prefab化する ←Imageを使ったButtonが よく使われる 実際は子にText等使う→
  28. 28. ・スクロールビュー ①スクロールさせる子要素(セル)を作成する ②スクロールビューの親となるScrollRectを作成 ④Maskの子にLayoutGroupを作成する ⑤LayoutGroupの子にスクロールさせる子要素を追加していく ③ScrollRectの子に表示範囲を決定するMaskを作成する と、まぁこんな風に作ってたんですが・・・ Unityさん仕事してくれました。
  29. 29. ハイ出来上がり! ②右クリックメニューかComponentメニューの UI>ScrollViewを選択 ┗ Content スクロールさせる子要素を入れる ・ScrollRect スクロールビュー機能 ┣ Viewport 見える範囲 ┣ Scrollbar Horizontal 横スクロールバー機能 ┗ Sliding Area 横スクロールスライダー範囲 ┗ Handle 横スクロールスライダーのハンドル ┣ Scrollbar Vertical 縦スクロールバー機能
  30. 30. 実演を交えて調整の一例 ・不要なスクロールバーを削除 ・ScrollViewの[RectTransform]で範囲設定 ・ScrollViewの[Image]で背景設定 ・ScrollViewの[ScrollRect]でスクロール動作設定 ・スクロール可動向き ・スクロールバーの設定 ・Viewportの[Image]と[Mask]で見える範囲を設定 ※ [ ]はコンポーネント ・Contentに[GridLayoutGroup]を追加しレイアウトを設定 ・Contentに[ContentSizeFitter]を追加しFitさせる方向を設定 ・あとはPrefab化した子要素をどんどん足してけば出来上がり
  31. 31. ※後工程を思いやり、UIを作る際に留意すること (小話) ・Prefab化する際はアタッチ漏れを確認 ・Prefab外の参照は最小限かつシンプルに ・作成後は必ず各対応予定の端末画面比で確認する
  32. 32. Multi Scene Editing(複合舞台編集)
  33. 33. Sceneの呼び出し方 が変わった Application.LoadLevel(“scene1”) Application.LoadLevelAdditive(“scene2”) Application.UnloadLevel(“scene3”) ︙ 一応動くんですが、警告出ちゃいます
  34. 34. Application Application.LoadLevel() Application.LoadLevelAsync() Application.LoadAdditive() Application.LoadAdditiveAsync() Application.UnloadLevel() Application.UnloadLevelAsync() Application.LevelCount SceneManagement.SceneManager SceneManager.LoadLevel() SceneManager.LoadLevelAsync() SceneManager.LoadAdditive() SceneManager.LoadAdditiveAsync() SceneManager.UnloadLevel() SceneManager.UnloadLevelAsync() SceneManager.SceneCount Sceneの呼び出し方 が変わった
  35. 35. Hierarchy(ヒエラルキー) が変わった こんな感じ ・変更点があるSceneにはアスタリスク(*)が表示される ・アクティブなSceneは太字で表示される ショートカットでのオブジェクト追加や右クリックメニューでの 動作などはこのシーンに対して行われるようです。 ・保存は個別でも全体でも可能 ・一時的に隠すなら Unload Scene ・Hierarchyから削除するなら Remove Scene ・Sceneが一つならSceneは表示されず今までと同じになる
  36. 36. 再生中のHierarchy(ヒエラルキー) が変わった ・DontDestroyOnLoadが表示されるようになった ・アタッチされていた参照は切られない ・GameObject.Findでの取得は可能
  37. 37. まずは全Sceneの土台となるSceneを作成しよう ・MainCameraを設置する (TagがMainCameraのもの) ・EventSystemを設置 ・主にSceneManager、AudioManager、GameManager等の DontDestroyする系のオブジェクトを配置するSceneとして利用 CommonSceneとでも名付けましょう
  38. 38. 各Scene作成時にまず行うこと ・Cameraをメイン以外にする (CommonSceneのと被ってエラー吐きます) ・CameraのClearFlags設定 (通常はDepthOnlyですかね) 従来のマルチカメラと同様の設定を行う ・CameraのCullingMask設定 (余計なものは映さない様にレイヤー管理はしっかり) ・Cameraに付いてるAudioListenerをRemoveComponentする ・CommonSceneをLoadSceneする
  39. 39. 各SceneでUGUIを使い始める時にまず行うこと ・EventSystem削除する (Hierarchyに一つだけ) ・Canvasの設定 (Depthとか) ・CanvasScalerの設定 (設定解像度を合わせる)
  40. 40. 未来予想 ・マージの際に競合しないで済む ・Prefab単位からScene単位での編集・管理にシフト ・UIや機能毎にScene単位で分割 ・複数のSceneを一つのSceneに後から結合する事も簡単 ・Sceneの加算合成が増えて管理は大変になる? ・とりあえずScene遷移の管理クラス作り変えないとね ・Sceneの加算と減算での遷移中心になるのでLoadは早くなる ・各機能の結合度が下げられる ・合成するSceneが増える前にエディタ拡張必要そう
  41. 41. Unity小話
  42. 42. ・Assets直下のフォルダ階層を工夫した方がいい 理由 →アセットストアからダウンロードしたりすると問答無用で階層を作られる →Script、Scripts、scriptなんて階層が並び始めたらもう目も当てられない。。。 個人的オススメ EditorやResources等のUnityの仕様上必要な階層以外はID_Nameのようにする 分け方や命名規則はプロジェクトチームでコーディング規約等と 一緒に取り決めれば良い こんな感じ→
  43. 43. ・可能ならアップデートする 理由 更新頻度が高くバージョンアップの度に様々な機能が実装されるため、 保守的に放置するとすぐに陳腐化が進む。 ググって出てきた一年前の記事の内容で動かないなんてのはよくある話 例:Unity5.0よりAudioMixerが追加され大体あったAudioManagerの作りが変わった。 ダッキング処理やリバーブ等のエフェクトもMixer上でノンスクリプトで出来た 例:5.3よりマルチシーンエディットが可能になり、プレハブ単位などで作業分担していたが Scene毎にUI担当・ゲームコア担当・エフェクト担当等の切り分けが容易になった 例:5.3からSceneManager登場によりApplication.LoadLevel(“Scene名”)が非推奨に・・・ ネームスペースが切られているものの大体独自に作成するSceneManagerと被る 紛らわしくて間違えたりしたくないので泣く泣くSceneManagerはSceneLoaderという名前に変更。 Unityのバージョンアップに合わせて 開発工程や手法のカイゼンが必要不可欠 例:UnityIAPで課金システムを楽に入れようとしたが、今のプロジェクトが5.2でやっている。。。 仕方なく従来からよく使われているPrime31等を使って実装した。
  44. 44. ご清聴ありがとうございました

×