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

Weitere ähnliche Inhalte

Ähnlich wie 【Unity道場スペシャル 2017沖縄】Unityで開発する上で 知っとくと便利な面白機能のアレコレ

Ähnlich wie 【Unity道場スペシャル 2017沖縄】Unityで開発する上で 知っとくと便利な面白機能のアレコレ (7)

ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみたゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
ゲーム開発初心者の僕がUnity + WebSocketで何か作ってみた
 
Unity勉強会ハンズオン
Unity勉強会ハンズオンUnity勉強会ハンズオン
Unity勉強会ハンズオン
 
はじめての Unity
はじめての Unityはじめての Unity
はじめての Unity
 
【Unity道場 幕張スペシャル3】「Playground」を魔改造!? ゲームデザイン授業への活用
【Unity道場 幕張スペシャル3】「Playground」を魔改造!? ゲームデザイン授業への活用【Unity道場 幕張スペシャル3】「Playground」を魔改造!? ゲームデザイン授業への活用
【Unity道場 幕張スペシャル3】「Playground」を魔改造!? ゲームデザイン授業への活用
 
Unityティーチャートレーニングデイ -認定アソシエイト編-
Unityティーチャートレーニングデイ -認定アソシエイト編-Unityティーチャートレーニングデイ -認定アソシエイト編-
Unityティーチャートレーニングデイ -認定アソシエイト編-
 
【ハンズオン】初めてのUnityで作る「3D野球盤」_"8a1"20150204発表資料
【ハンズオン】初めてのUnityで作る「3D野球盤」_"8a1"20150204発表資料【ハンズオン】初めてのUnityで作る「3D野球盤」_"8a1"20150204発表資料
【ハンズオン】初めてのUnityで作る「3D野球盤」_"8a1"20150204発表資料
 
金沢工業大学電子計算機研究会新入生向けUnity講習会資料
金沢工業大学電子計算機研究会新入生向けUnity講習会資料金沢工業大学電子計算機研究会新入生向けUnity講習会資料
金沢工業大学電子計算機研究会新入生向けUnity講習会資料
 

Mehr von Unity Technologies Japan K.K.

今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識
今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識 今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識
今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識
Unity Technologies Japan K.K.
 

Mehr von Unity Technologies Japan K.K. (20)

建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
 
UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!
 
Unityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクションUnityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクション
 
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしようビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
 
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーションビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
 
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
 
Unity教える先生方注目!ティーチャートレーニングデイを体験しよう
Unity教える先生方注目!ティーチャートレーニングデイを体験しようUnity教える先生方注目!ティーチャートレーニングデイを体験しよう
Unity教える先生方注目!ティーチャートレーニングデイを体験しよう
 
「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発
 
FANTASIANの明日使えない特殊テクニック教えます
FANTASIANの明日使えない特殊テクニック教えますFANTASIANの明日使えない特殊テクニック教えます
FANTASIANの明日使えない特殊テクニック教えます
 
インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021
 
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
 
Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話
 
Cinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作るCinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作る
 
徹底解説 Unity Reflect【開発編 ver2.0】
徹底解説 Unity Reflect【開発編 ver2.0】徹底解説 Unity Reflect【開発編 ver2.0】
徹底解説 Unity Reflect【開発編 ver2.0】
 
徹底解説 Unity Reflect【概要編 ver2.0】
徹底解説 Unity Reflect【概要編 ver2.0】徹底解説 Unity Reflect【概要編 ver2.0】
徹底解説 Unity Reflect【概要編 ver2.0】
 
Unityティーチャートレーニングデイ -認定プログラマー編-
Unityティーチャートレーニングデイ -認定プログラマー編-Unityティーチャートレーニングデイ -認定プログラマー編-
Unityティーチャートレーニングデイ -認定プログラマー編-
 
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
 
今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識
今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識 今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識
今だから聞きたい!Unity2017/18ユーザーのためのUnity2019 LTS基礎知識
 
【Unity Reflect】無料のViewerに機能が増えた!?~お披露目会編~
【Unity Reflect】無料のViewerに機能が増えた!?~お披露目会編~【Unity Reflect】無料のViewerに機能が増えた!?~お披露目会編~
【Unity Reflect】無料のViewerに機能が増えた!?~お披露目会編~
 

Kürzlich hochgeladen

Kürzlich hochgeladen (10)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

【Unity道場スペシャル 2017沖縄】Unityで開発する上で 知っとくと便利な面白機能のアレコレ

Hinweis der Redaktion

  1. 今回は「Unityで開発する上で知っとくと便利なおもしろ機能の幾つかを紹介します」
  2. 今回話す内容はこんな感じです。 どれも直ちに必要ない要素ではあるかもしれませんが、覚えておくと面白いゲームを作る上で何かと役に立つ事があるので、是非思い出してもらえるとうれしいです。 早速話を進めていこうと思いますが、
  3. 今回は参加者の方にそれなりに「Unityは初めて」といった感じの方がいらっしゃるようなので、少し復習を。
  4. 題して、大雑把な流れ。
  5. 例えば、サッカーの世界を表現したいとします。 どんな世界か?
  6. これを言い直すと、世界、モノ、振る舞いの三つに分けられます。 サッカー場が世界、サッカーボールが物、サッカーボールには「跳ねる」振る舞いが設定されています。
  7. これはUnity用語で言い直すと、Scene、GameObject、Componentの3種類
  8. 構造的にはこんな感じ。 Sceneがあり、Scene場にGameObjectが存在し、GameObjectが複数の振る舞いを持つ
  9. つまり、こういうこと。 ちなみに
  10. Unityエディターの画面はこんな感じ。 この画面を使ってゲームを作っていく
  11. 画面の役割も、SceneやComponentを編集する事に集中しています。
  12. さて、ここからが本題です。
  13. まずはステージを配置するTips
  14. ステージを作るのは、慣れてないと非常に面倒くさい作業です。
  15. はじめてゲームを作る人は、Unityのステージにこんな感じのを作るんじゃないでしょうか。
  16. ただ実際の世界に目を当ててみると、コレほどまで規則正しく並んでいることは少ないです。 実際の世界に目を向けてみると、ある程度の法則性はあれど綺麗に並ぶことは殆どありません。実際の世界では、もっとカオスなのです。
  17. 例えば右のように少し物の配置をカオスにするだけで、それっぽさはグット良くなります。 この例は適当に作った物なので雑ですが、自宅の周辺などを模倣して配置してみると、どれほど世界が雑なのか確認出来ます。
  18. これを数値だけで配置するのは骨が折れるかもしれません。もっと思った所に配置したいのです。
  19. 問題になる事はこの3つです。 まずは解決方法を紹介します。
  20. DEMO Put Stage Colliderの上に乗るように配置する。 Layerでさわれないようにする Inspectorのスライドと数式を試す
  21. 次のTipsは、オブジェクトのやり取りについてです。
  22. 先程話しましたが、Unityの世界はSceneとGameObject、そしてComponentによって成り立っています。 ただし、それだけでは公園にボールがあるだけ、物があるだけです。
  23. サッカーを思い出してみて下さい。 ゲームには実際に動くプレイヤーやボールの他に、進行を管理する審判が居ました。 審判はプレイヤー自身の場合もあります。
  24. Unityの考え方で言えば、審判という機能を持ったGameObjectが存在し、他のプレイヤーやオブジェクトを監視・ゲームの進行を管理します。
  25. 実際、ゲームをゲームらしくする為に必要なものは、他のオブジェクトを観測し監視しゲームの進行を管理するゲームマネージャーのような物の存在です。 他のプレイヤーはプレイヤー同士で相互作用する事もありますが(ステルスゲームの見えた・見えない、サバイバルゲームのHit宣言等)進行を管理するのは審判が必要です。
  26. 流石に最初から「審判」の機能を持ったコンポーネントは存在しませんが、自分で定義することが出来ます。 この場合、他のGameObjectから現状のステータスを持ったComponentを読取り、ゲームの状態を判断する形です。
  27. この動作を実現するには、一般的にはC#でコードを書く必要があります。 コードはオブジェクトを観測するだけでなく、何らかのアクションを行った時にオブジェクトにアクションを指示する際にも必要です。 まずは3つの一般的なやり方を軽く紹介します。
  28. 最も基本的なのは、観測先のオブジェクトをUnityエディターで設定できるようにしてセットする方法です。 観測先をエディター側でセット出来るので、コードを書く分量はかなり少ないです。また変更も楽ちんです。
  29. 量が増えてきたり、観測対象が動的に増減する場合には、スクリプトで検索するコードも含めてセットします。
  30. 観測対象が唯一無二の場合は、唯一無二のオブジェクトにする事で他のComponentからのアクセスを楽にする事も出来ます。 これは唯一無二のプレイヤーが存在する場合や、唯一無二の審判に自身で登録しに行く場合等が考えられます。
  31. さて、先程紹介した基本的な方法では動的に増減する場合や、処理の呼び出しは殆どコードを記述する必要があります。 ただ、実際大規模な所は兎も角、もっと簡単な部分でも一々コードを書くのは正直面倒です。 折角の機会ですので、少しおもしろい使い方を紹介します。内容は少し上級者向けですので、忘れてもらっても問題ありません。
  32. Unityのイベントシステムは、エディター側で呼び出す処理を決める事ができるシステムです。
  33. 最初からSceneに配置している物から、最初からSceneに配置している物に対しての指示を、殆どコードを書かずに変更・実現出来ます。
  34. Demo 簡単な例を見せましょう。 これで音が出ます。
  35. もう一つが、最近注目されているScriptableObjectという機能です。 ScriptableObjectはScene・GameObject・Componentの枠から外れる「アセット(ファイル)」として存在する事のできるオブジェクトです。
  36. このためSceneに含まれるGameObjectと異なり、Prefab(動的にGameObjectをシーンに追加される際によく使われる、セットアップ済GameObjectを配置する手法)や他のSceneのGameObjectからでも参照・情報を共有する事ができます。 実際のデモ
  37. ここで面白いのが、インスタンスとして存在するためUnityEventと連携出来る点です。 UnityEventはMethodを呼べるので、SOのメソッドを呼べます。例えば自身のインスタンスを登録する等の処理を行います。
  38. 後は他のオブジェクトがScriptableObjectに対してメソッドの呼び出しを行う際、SOから他のオブジェクトに対して仲介を行えば
  39. C2はC1の存在を知らなくともメソッドを呼び出すことが出来ます。 これはC2が動的に作成された場合でも有効な事を意味し、動的にC1が作られても問題ない事も意味します。 Moveデモ
  40. この使い方は少し特殊であり、一応全てScriptで運用管理する場合には冗長です。ただ、オブジェクトの接続先が増減したりする条件で簡単なイベントを呼び出したいといった場合では、このアプローチは割と良い感じに動くかなと。
  41. ちなみに逆に、Scriptで全部制御したい…Componentとか殆ど使わない…みたいな事をしたい人もよく居ますが これは良くあることです。
  42. 実際問題、例えばボードゲーム等「ゲームマスターが駒の動きまで制御する」といったケースは多々存在します。 これは向いてる・向いてない…というより使い方次第な部分ではあります。
  43. さて、最後の項目…画面を綺麗にするアプローチについてです。
  44. 実際「きれいな画面」はどのように実現されているのか…といった話ですが、
  45. まぁ「テクスチャの綺麗さ」「モデルの品質」「味わい深いライティング」「画面にマッチした質感表現」「画面効果」とか、そういった感じでしょう。
  46. この「きれいなモデル」や「テクスチャ」の表現に関しては、Unityでは機能を提供していないので専用のDCC(Digital Content Creation)ツールを使うのが良いです。
  47. 残りの「ライティング」「画面効果」「質感表現」はリアルタイムに動作する項目ですので、Unity側である程度コントロールする事が期待されています。
  48. ちなみに、ライティングはどちらかと言えば空間を演出する物、質感は物質を演出する物で、画面効果は空間と物質を上手い感じに繋いでくれる事を期待されています。
  49. まずライティングから紹介します。
  50. 実際どの程度ライティングが効果的かと言うと、左がライティングを向こうにしたもの、右がライティングを有効にしたものです。 どちらが好きかは人次第な所はありますが、かなり違って見えます。
  51. ライティングを有効にする操作は、GameObjectの描画設定を管理してるMeshRendererにあるLightmap Staticにチェックを入れ、ライトをベイクするだけです。 ベイクの操作を行うと
  52. 左から 材質の色抽出、 反射光・間接光の計算 影の計算…を経て 実際のライティング済画面を作ってくれます。
  53. もう一つの画面を綺麗にするポイントは、画面効果です。 ゲーム画面の絵を元に、画面にエフェクトを追加します。 例えばカメラの模倣。遠距離や近距離はボケて丁度いい物だけを細かく出してくれる。 例えば光のにじみ。「光っているオブジェクト」を明確に表現してくれます。 例えば色の調整。何となく退屈な絵から、メリハリのある絵にしてくれます。映画のようなメリハリのある絵が使われる場面では、必ず使われています。
  54. これは凄い難しい機能で、多くの数学的・3D的な知識が必要ですが、 Post Processing Stackを使うと割とサクっとそれなりにものが作れます。 逆に言うと、コレが無いと残念な絵しか作れません。 Demo 実際にやってみます。(PostEffectシーン)
  55. とりあえず最低でもBloomとカラーグラデーションは欲しい所です。
  56. ゲームの見た目も盛ったら変わる!!!!ヤバい!!ポストプロセス!!入門!!!!!!!!! というビックリ過多な動画があるので、それを見て欲しい。
  57. 最後に質感の話をしますが、その前にコレを見て下さい。 ロボです。
  58. 同じモデルのロボです。
  59. この違いは何処から来るのでしょうか。
  60. この2つの違いはShaderから来ています。Shaderは光の陰影を表現する為の物で、考え方としては3Dオブジェクトを塗る際のタッチを決める項目です。
  61. Shaderと、Shaderが使うテクスチャをセットにたものをMaterialと呼んでいます。 このMaterial(材質)により、どのようにモデルが塗られるのかを決めることが出来ます。 なお、以前は塗り方はプログラマの裁量で決められており、塗り方を統一するのは難しかったのですが、
  62. 昨今ではPBR(物理的な絵を目標とした塗り方)が一般化しており、DCCツールで生成したデータを使用すれば、DCCツールと同じような塗り方が実現できています。
  63. 逆に日本では、リアリスティックではない「アニメ調」的な塗り方の絵の方がウケが良いのは面白い特徴です。
  64. これで自分の話は終わりですが、最後におさらいです。
  65. 今回話した内容は3つ。 ステージ配置のTips、オブジェクト間のやりとり、そしてライティングです。 どれも直ちに必要ない要素ではあるかもしれませんが、覚えておくと面白いゲームを作る上で何かと役に立つ事があるので、是非思い出してもらえるとうれしいです。