847 Views
July 20, 17
スライド概要
2017/7/15に開催されたUnity道場スペシャル沖縄のスライドです。
講師:山村 達彦(ユニティ・テクノロジーズ・ジャパン合同会社)
Unityのイベント資料はこちらから:
https://www.slideshare.net/UnityTechnologiesJapan/clipboards
リアルタイム3Dコンテンツを制作・運用するための世界的にリードするプラットフォームである「Unity」の日本国内における販売、サポート、コミュニティ活動、研究開発、教育支援を行っています。ゲーム開発者からアーティスト、建築家、自動車デザイナー、映画製作者など、さまざまなクリエイターがUnityを使い想像力を発揮しています。
Unityで開発する上で 知っとくと便利な面白機能のアレコレ Unity Technologies Japan(GK) 山村 達彦
今回話す内容 ステージの配置の 便利Tips オブジェクト間の やりとり とりあえず 画面を綺麗に
復習
Unityでゲームを作る大雑把な流れ
例えばサッカー時空
世界 物 振る舞い
世界 サッカーコート
物 ゴール サッカーボール コート
振る舞い ボールが入る 跳ねる 蹴れる ゴールに入る ボールに当たる 範囲がある
Unity用語で言うと、 世界 Scene 物 GameObject 振る舞い Component
Component Component サッカ ーボー ル 跳ねる 蹴れる ゴールに入る Component Component Component Component GameObject GameObject GameObject Scene サッカー場
Component Component Component 世界(Scene)を作り 物(Object)を配置し 機能(Component)を与える Component Component Component GameObject GameObject GameObject Scene
Componentを 設定する Sceneを構築 ファイル (アセット)
本題
ステージ配置の便利Tips
ステージを作るのは、一番楽しい所であり、 一番面倒くさい所でもある。
世界は意外とカオス ゲームを作り始めて簡単なステージを作ると、大体が非常に規則的 に物を並べる事が多いです。 それはある意味で間違っていないかもしれませんが、余り自然では ありません。実際、等間隔かつ大きさの等しいオブジェクトが並ぶ 光景は、あまり見られない物です(学校の机でさえ!) Replace box with image そのため、リアルを出すにはある程度の「ゆらぎ」を考えて配置す るのが良いです。まずは自宅周辺の再現とか良いかもしれません。
思った所に配置したい Sceneの構築は、ステージの構築でもある。 GameObjectを生成する際、思った所にオブジェクトが配置出来な いケースが多々存在する。 思った位置にサクっと置けると、操作の上では非常に楽しくなる。 Replace box with image ここで紹介する幾つかのTipsを知らない場合、オブジェクトをセッ トするのは非常に面倒くさいことになるかもしれない。
配置を楽しくする為の要望 ● オブジェクトの上に乗るように配置したい ● オブジェクトを選択出来なくしたい ● Inspectorで色々な数値を試したい
配置を楽しくする為の3つのTips ● Colliderの上に乗るように配置する ● レイヤーでオブジェクトをロック ● Inspectorで色々はスライダーで動かせる
オブジェクト間のやりとり
世界 Scene 物 GameObject 振る舞い Component
プレイヤー 殴る蹴る ボール 跳ねる 審判 ジャッジ ゲーム進行
審判は他のGameObjectやComponentを観測する
Replace box with image ゲームをゲームらしく するキモは オブジェクト間の やり取りにあり。 審判がルールを監視したり、勇者が敵を選択して攻撃したり、 ボールがゴールに突入したり、カードを出した事でゲームが進行し たり、好き勝手動くのではなく「ゲーム」としての形を取る為には 、オブジェクト間のやり取りは必須となる。
現在位置 HP プレイヤー情報 退場
Unityでよく見るオブジェクト間のやり取り public 任意のコンポーネントcomp; comp.何らかの処理(); var obj = Find(“オブジェクト名”); obj.GetComponent<任意のコンポーネント>().何らかの処理(); static 任意のコンポーネント instance; instance = this;
Unityでよく見るアプローチ public 任意のコンポーネントcomp; comp.何らかの処理(); エディターでセット
Unityでよく見るアプローチ Scene内の GameObjectを探す var obj = Find(“オブジェクト名”); var comp =obj.GetComponent<任意のコンポーネント>(); comp..何らかの処理(); GameObjectが持つ Componentにアクセスす る
Unityでよく見るアプローチ 唯一無二に超進化 static 任意のコンポーネント instance; … instance = this; var ins = 任意のコンポーネント .Instance; ins.何らかの処理(); static界
出来るだけコードを弄らず調整したい ● UnityEventでメソッドの呼び出し ● ScriptableObjectで情報の共有
EventSystem Serialize可能なオブジェクト(PrefabやScriptableObject、Scene内 のオブジェクト等)に対して、メソッドを呼び出す処理をエディタ ー側で定義する機能。 Replace box with image uGUI等で使用されており、ボタンを押した際の動作等は EventSystemを使われる事がある。
EventSystemで呼び出す コードをほぼ書かずに実現 Component Component Component GameObject GameObject Scene
ボタンを押すと音が出る ● AudioSourceを用意 (音を鳴らすスピーカーのようなもの) ● Buttonを押したらPlayOneShotを 呼ぶようにセッティング
ScriptableObject SceneもGameObjectもComponentも超越する事が可能な存在 意図的に制御しない限り、ゲーム内に一つである事を補償出来て、 誰も使わなくなったらひっそりと破棄される事も出来る。 Replace box with image 同時にUnityのエディターからの編集にも対応しており、 任意のアセットに対しての参照も構築出来る。
アセット時空 シーン時空 ScriptableObject Component いつでも、どこからでも、 アクセス出来る Component Component GameObject GameObject Scene
登録 ScriptableObject C1 C2
ScriptableObject C1 呼び出し C2
呼び出し ScriptableObject C1 呼び出し C2
使い分け ● ● ● Scene内のオブジェクトを最初から参照出来るならinspectorで設定 参照対象が固定で、常に増減するならstatic ある程度GUIで接続先を変更したいならScriptableObject
逆に、コードで全部制御したい 俺、Component一つしか使ってねーわwww GameObjectとか動的生成だわ Unityの機能 全然つかってねーわーつれーわ よくある事です ゲームによっては正しい選択です。 但し調整の際にコードに手を入れる必要が出るかもしれません。
ゲームマスターが進行するゲームは 各オブジェクトに持たせるのは パラメータのみ等の方が楽かもしれない
画面を綺麗に…
3Dにおける綺麗さ 3Dにおける「綺麗さ」は意見は色々あるが、 以下の項目が大半を占めるのではないかと個人的には考えている。 Replace box with image ● ● ● ● ● テクスチャの綺麗さ モデルのクォリティ 味わい深いライティング 質感表現 綺麗な画面効果
画面効果 綺麗なモデル 綺麗な質感 ライティング 綺麗なテクスチャ
綺麗な画面 ● 綺麗なモデル ● 綺麗なテクスチャ 専用ツールのDCCツールで作る
綺麗な画面 ● ● ● ● ● 綺麗なモデル 綺麗なテクスチャ 綺麗なライティング 綺麗な画面効果 綺麗な質感表現
ライティング 空間 画面効果 質感 物
ライティング 光源に対して、光と影の表現を行う。 ただし動的に計算していては多くの電力と性能を浪費してしまうの で、ある程度は事前に計算しておく手法。 光の陰影、間接光の表現、影野表現等々の処理を経て実際の絵が表 現される。 Replace box with image
画面効果 所謂Post Effectと呼ばれる手法。 Post Process Stack(アセット)を導入する事で、簡単に高度なエ フェクトが実現出来る。 今まではUnityはImageEffectと呼んでいたが、最近はImageEffectだ ったりPostEffectだったりpostFXだったり呼び方が安定しない。 Replace box with image 描画が完了したゲーム画面に対して画像的にエフェクトを追加する 事で、画面を味わい深い内容にしてくれる。 特にbloom、Color Gradationはまず入れておきたい
とりあえずBloom貼っとけば次世代(約20年前)
ゲームの見た目も盛ったら変わる!!!!ヤバい!! ポストプロセス!!入門!!!!!!!!!
この違いは何処から?
表現の違いは Shader ● ● 光の陰影を表現する 表面の色を塗る 同じモデルだが塗り方が違う
表面の質感は Material(材質)と Shader(塗り方)次第 3Dの表現方法は、基本的にMaterial(材質)とShader(塗り方)次 第で決まる。 ただ、今まではこの「塗り方」が悪い意味で自由だったため、整合 性を取る事が難しく、フォトリアルといった「誰の目から見ても同 じように見える」物の実現は難しかった。 昨今ではPBR(物理ベースレンダリング)とPBR対応のShaderの登 場により、テクスチャの設定が一致していればリアリスティックに 見える事が実現出来ている。
おさらい
今回話した内容 ステージの配置の便利Tips ● ● ● オブジェクトの上に 乗るように配置 選択できなくする 数値を楽に動かす オブジェクト間のやりとり ● ● ● よく見るアプローチ ScriptableObjectを用いた データの共有 UnityEvent とりあえず画面を綺麗に ● ● ● ライティング 画面効果はPostProcessStack 質感表現は ShaderとMaterial
Thank you