Submit Search
Upload
KC3_Room2_9_6
•
Download as PPTX, PDF
•
0 likes
•
64 views
R
RyogaYamauchi
Follow
9/6にKC3で発表した勉強会の資料です。
Read less
Read more
Software
Report
Share
Report
Share
1 of 49
Download now
Recommended
デジタルゲームの人工知能と数学、プログラミング教育
デジタルゲームの人工知能と数学、プログラミング教育
Youichiro Miyake
『人工知能のための哲学塾 at ゲンロンカフェ』 講演資料
『人工知能のための哲学塾 at ゲンロンカフェ』 講演資料
Youichiro Miyake
機械学習ゴリゴリ派のための数学とPython
機械学習ゴリゴリ派のための数学とPython
Kimikazu Kato
ゲームエンジンの文法【UE4】No.007 スタティックメッシュエディタ:スタティックメッシュアセットとアクターの操作
ゲームエンジンの文法【UE4】No.007 スタティックメッシュエディタ:スタティックメッシュアセットとアクターの操作
Tatsuya Iwama
マインドフルネスと人工知能
マインドフルネスと人工知能
Youichiro Miyake
哲学とビジネスと人工知能
哲学とビジネスと人工知能
Youichiro Miyake
ゲームAIから見るAIの歴史
ゲームAIから見るAIの歴史
Youichiro Miyake
人工知能とゲーム(前篇)
人工知能とゲーム(前篇)
Youichiro Miyake
Recommended
デジタルゲームの人工知能と数学、プログラミング教育
デジタルゲームの人工知能と数学、プログラミング教育
Youichiro Miyake
『人工知能のための哲学塾 at ゲンロンカフェ』 講演資料
『人工知能のための哲学塾 at ゲンロンカフェ』 講演資料
Youichiro Miyake
機械学習ゴリゴリ派のための数学とPython
機械学習ゴリゴリ派のための数学とPython
Kimikazu Kato
ゲームエンジンの文法【UE4】No.007 スタティックメッシュエディタ:スタティックメッシュアセットとアクターの操作
ゲームエンジンの文法【UE4】No.007 スタティックメッシュエディタ:スタティックメッシュアセットとアクターの操作
Tatsuya Iwama
マインドフルネスと人工知能
マインドフルネスと人工知能
Youichiro Miyake
哲学とビジネスと人工知能
哲学とビジネスと人工知能
Youichiro Miyake
ゲームAIから見るAIの歴史
ゲームAIから見るAIの歴史
Youichiro Miyake
人工知能とゲーム(前篇)
人工知能とゲーム(前篇)
Youichiro Miyake
Unity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz Space
Unity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz Space
Mori Tetsuya
金沢工業大学電子計算機研究会新入生向けUnity講習会資料
金沢工業大学電子計算機研究会新入生向けUnity講習会資料
Keisuke Yasuda
IoT診断入門
IoT診断入門
黒 林檎
IoT with Unity
IoT with Unity
Saitou Yuta
20190312 Visualization System in Rust
20190312 Visualization System in Rust
ToshihiroYamaguchi3
neural architecture search with reinforcement learning
neural architecture search with reinforcement learning
Yamato OKAMOTO
個人開発 デプロイまでの道のり
個人開発 デプロイまでの道のり
K K
道具としての半導体設計:Lチカを題材として
道具としての半導体設計:Lチカを題材として
Junichi Akita
Windows 11とNPUで実現するWindowsのAI
Windows 11とNPUで実現するWindowsのAI
Tomokazu Kizawa
P5js web editorで、クリエイティブコーディングを!
P5js web editorで、クリエイティブコーディングを!
Suzuki Junko
【Unity道場教育スペシャル】新潟コンピュータ専門学校ゲームクリエーター科における、Unityを活用した産学官プロジェクトの事例
【Unity道場教育スペシャル】新潟コンピュータ専門学校ゲームクリエーター科における、Unityを活用した産学官プロジェクトの事例
UnityTechnologiesJapan002
SLAMチュートリアル大会資料(ORB-SLAM)
SLAMチュートリアル大会資料(ORB-SLAM)
Masaya Kaneko
kagamicomput201805
kagamicomput201805
swkagami
VTC on Unity の 進捗について
VTC on Unity の 進捗について
Ryodo Tanaka
3Gシールド・カンファレンス:特別講演
3Gシールド・カンファレンス:特別講演
Shigeru Kobayashi
tmp
tmp
Junichi Katsu
ちょっとした冬休み準備をしよう
ちょっとした冬休み準備をしよう
はなずきん Hana
東方ゲームAIとその歴史
東方ゲームAIとその歴史
ide_an
20190601栄光学園進路ガイダンス
20190601栄光学園進路ガイダンス
Keita Miyano
わくわく勉強会 フロントエンド
わくわく勉強会 フロントエンド
K K
More Related Content
Similar to KC3_Room2_9_6
Unity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz Space
Unity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz Space
Mori Tetsuya
金沢工業大学電子計算機研究会新入生向けUnity講習会資料
金沢工業大学電子計算機研究会新入生向けUnity講習会資料
Keisuke Yasuda
IoT診断入門
IoT診断入門
黒 林檎
IoT with Unity
IoT with Unity
Saitou Yuta
20190312 Visualization System in Rust
20190312 Visualization System in Rust
ToshihiroYamaguchi3
neural architecture search with reinforcement learning
neural architecture search with reinforcement learning
Yamato OKAMOTO
個人開発 デプロイまでの道のり
個人開発 デプロイまでの道のり
K K
道具としての半導体設計:Lチカを題材として
道具としての半導体設計:Lチカを題材として
Junichi Akita
Windows 11とNPUで実現するWindowsのAI
Windows 11とNPUで実現するWindowsのAI
Tomokazu Kizawa
P5js web editorで、クリエイティブコーディングを!
P5js web editorで、クリエイティブコーディングを!
Suzuki Junko
【Unity道場教育スペシャル】新潟コンピュータ専門学校ゲームクリエーター科における、Unityを活用した産学官プロジェクトの事例
【Unity道場教育スペシャル】新潟コンピュータ専門学校ゲームクリエーター科における、Unityを活用した産学官プロジェクトの事例
UnityTechnologiesJapan002
SLAMチュートリアル大会資料(ORB-SLAM)
SLAMチュートリアル大会資料(ORB-SLAM)
Masaya Kaneko
kagamicomput201805
kagamicomput201805
swkagami
VTC on Unity の 進捗について
VTC on Unity の 進捗について
Ryodo Tanaka
3Gシールド・カンファレンス:特別講演
3Gシールド・カンファレンス:特別講演
Shigeru Kobayashi
tmp
tmp
Junichi Katsu
ちょっとした冬休み準備をしよう
ちょっとした冬休み準備をしよう
はなずきん Hana
東方ゲームAIとその歴史
東方ゲームAIとその歴史
ide_an
20190601栄光学園進路ガイダンス
20190601栄光学園進路ガイダンス
Keita Miyano
わくわく勉強会 フロントエンド
わくわく勉強会 フロントエンド
K K
Similar to KC3_Room2_9_6
(20)
Unity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz Space
Unity meets Kinect -Unity で NUI を扱ってみた- / 2015.06.23 at TechBuzz Space
金沢工業大学電子計算機研究会新入生向けUnity講習会資料
金沢工業大学電子計算機研究会新入生向けUnity講習会資料
IoT診断入門
IoT診断入門
IoT with Unity
IoT with Unity
20190312 Visualization System in Rust
20190312 Visualization System in Rust
neural architecture search with reinforcement learning
neural architecture search with reinforcement learning
個人開発 デプロイまでの道のり
個人開発 デプロイまでの道のり
道具としての半導体設計:Lチカを題材として
道具としての半導体設計:Lチカを題材として
Windows 11とNPUで実現するWindowsのAI
Windows 11とNPUで実現するWindowsのAI
P5js web editorで、クリエイティブコーディングを!
P5js web editorで、クリエイティブコーディングを!
【Unity道場教育スペシャル】新潟コンピュータ専門学校ゲームクリエーター科における、Unityを活用した産学官プロジェクトの事例
【Unity道場教育スペシャル】新潟コンピュータ専門学校ゲームクリエーター科における、Unityを活用した産学官プロジェクトの事例
SLAMチュートリアル大会資料(ORB-SLAM)
SLAMチュートリアル大会資料(ORB-SLAM)
kagamicomput201805
kagamicomput201805
VTC on Unity の 進捗について
VTC on Unity の 進捗について
3Gシールド・カンファレンス:特別講演
3Gシールド・カンファレンス:特別講演
tmp
tmp
ちょっとした冬休み準備をしよう
ちょっとした冬休み準備をしよう
東方ゲームAIとその歴史
東方ゲームAIとその歴史
20190601栄光学園進路ガイダンス
20190601栄光学園進路ガイダンス
わくわく勉強会 フロントエンド
わくわく勉強会 フロントエンド
KC3_Room2_9_6
1.
Unityで今すぐ使えるTips・コツ(Room2) 2020/9/5 13:30~ 学内勉強会
2.
名前:山内龍我 大学:京都産業大学 学年:3年 役職:電子計算機応用部・主幹 趣味:バイク(SR400), Unity クライアントエンジニア(志望) 自己紹介 @Yamauchi_Ryoga 自己紹介
3.
目次 1. ゲームオブジェクトの参照の取り方(扱い方ゲームオブジェクト) • Actionの使い方 2.
入出力の取り方 3. MVCのやり方(メイン) 4. シングルトンの使い方 5. オブザーバパターンの使い方 • Rx • UniTask(時間があれば) • DI(時間があれば) お題:タイマーを作る
4.
ゲームオブジェクトの参照の取り方 (正しくはゲームオブジェクト(にアタッチされているスクリプト)の参照の取り方) みなさんはどうやってゲームオブジェクトの参照を取得していますか?
5.
ゲームオブジェクトの参照の取り方 Cubeを作った時に、どうやってCubeをスクリプトで操りますか?
6.
ゲームオブジェクトの参照の取り方 オブジェクトの子供にオブジェクトがある場合
7.
ゲームオブジェクトの参照の取り方 GameObject.Find()は使っていませんよね …?
8.
[SerializeField]をつけると ゲームオブジェクト側かオブジェクトを渡せる (publicで公開してもいいけど、よくない) ゲームオブジェクトの参照の取り方 エディタ上からオブジェクトを指定できる
9.
オブジェクトの参照が取れたから もうGameObject.Find()とかしなくていいじゃん。 ゲームオブジェクトの参照の取り方
10.
タイマーを作る
11.
タイマーを作る とりあえず、エディタから入力された数値を表示してみる
12.
タイマーを作る できた🎉
13.
タイマーを作る Start()に関数を追加します 1秒ずつデクリメントして表示 表示
14.
タイマーを作る うごいた🎉
15.
タイマーを作る タイマーは完成しましたが、こんな要求をされました。 すまんが、ボタンから起動できるようにしてくれ!
16.
タイマーを作る 言われると思って先に用意してたわ!よかった!
17.
タイマーを作る まさか、ボタン一つの機能を追加するのにエディターから指定してませんよね…?
18.
タイマーを作る こんな関数を作ってOnClick()に指定して起動する デメリット • 指定したオブジェクトの関数しか指定できない •
いちいちエディタに戻って指定しないといけない
19.
タイマーを作る onClick.AddListenerを使おう! クリックされた時の処理を事前に登録している 引数はAction型。 メリット • OnClickのメソッドをprivateにできる • エディターに戻って設定しなくてもいい •
他のオブジェクトの関数を指定したくても、ここで渡せばいい
20.
タイマーを作る Actionとは、メソッド参照のこと(コールバックとして使うことも多い) メソッドを変数的な感じで渡せる。 例えば、敵キャラを倒した時ちゃんとアニメーションを終えてからプレイヤーに経験値を入れたいとか
21.
タイマーを作る 例えば、敵キャラを倒した時ちゃんとアニメーションを終えてからプレイヤーに経験値を入れたい時
22.
タイマーを作る プレイヤーがいるとして、 ダメージを食らったら時間が2秒減る機能が欲しいんや ボタンから起動できるようになりましたが、こんな要求をされました。
23.
タイマーを作る そんなん簡単や、ダメージ受けた時に2秒時間が減るようにすればええんや。
24.
タイマーを作る 画面を作って、プログラムを実装します、
25.
タイマーを作る さっきと同じように、PlayerにTimerViewの参照を持たせてあげればいいねん。
26.
タイマーを作る できた🎉
27.
タイマーを作る ここで疑問に思って欲しいこと • PlayerViewって、Playerを制御するプログラムのはずなのにTimerViewまで持ってる… • [SerializeField]で取得してきたけど、それができない場合はないの…? ある。プログラムから自動生成した場合は違う方法で渡さないといけない。 PlayerはTimerの情報を持つべきではない
28.
MVCとは MVCの概念が登場する • Playerの概念自体をレイヤーに分ける • 描画(View) •
他のコンポーネントとのやり取り(Controller) • データ(Model) ModelView Controller Controllerで制御することによって、PlayerView自体はTimerの参照を持たなくて良くなる。 Hp:10 At:5 Df:3
29.
MVCとは MVCにも種類がある Push MVC Pull
MVC 引用:http://super-apparel-engineer.hatenablog.com/entry/2016/10/11/102637
30.
MVCとは ①入力(ダメージ) ModelView Controller Player ModelView Controller Timer ②Timerを2秒減らしたい ③2秒減らす ④Viewに変更を通知 ⑤タイマーの秒数を描画
31.
タイマーを作る Playerのプログラムを作る 1.生成時にControllerも生 成 2.Modelも生成 3.Timerを減らす命 令
32.
MVCとは Timerのプログラムを作る Viewが公開しているのはUpdateTimeメソッドだけ ControllerはViewとModelの仲介役 Modelはビジネスロジックを書いてるだけ テストが書けるようになるのがメリット
33.
MVCとは ①入力(ダメージ) ModelView Controller Player ModelView Controller Timer ②Timerを2秒減らしたい ③2秒減らす ④Viewに変更を通知 ⑤タイマーの秒数を描画 2. Modelが変更された時どうやってControllerに通知するの? 1. どうやってPlayerのControllerからTimerのModelの参照をとってくるの?
34.
MVCとは どうやってPlayerのControllerからTimerのModelの参照をとってくるの? ModelView Controller ModelView Controller Player Timer GameModel Modelへの参照を統括するクラス シングルトンで運用する場合が多い
35.
シングルトンとは GameModelがそれぞれのインスタンスを持っている Staticなのでゲームモデル生成時にInstanceも生成 GameModel.Instanceで参照をとってこれる これで他のゲームオブジェクトのModelをいじれるようになった🎉
36.
MVCとは ①入力(ダメージ) ModelView Controller Player ModelView Controller Timer ②Timerを2秒減らしたい ③2秒減らす ④Viewに変更を通知 ⑤タイマーの秒数を描画 2. Modelが変更された時どうやってControllerに通知するの?
37.
IObserverとは Modelが変更された時どうやってControllerに通知するの? A.Observerパターンを使う Subject Observer ①イベントの発行 ②イベントの購読 値が変更されたよ!通知出す
その値でViewを変更するように先に処理 登録しとくから実行してね!
38.
IObserverとは TimerView TimerModelTimerController ↑OnUpdateTime()になってる ↑TimerControllerのコンストラクタで Subscribe(購読)(処理の登録)をしている Subject(イベント発行側)を作る→ IobservableでSubscribeを公開している→ Subject.OnNext()で通知を出している→
39.
IObserverとは これ、いわゆるRx(Reactive Extentions)的な考え方になっていくんですけど Unityに標準で実装されているものにSubjectとかがない(自前で実装しないといけない) (eventとかdelegateとかあるしそっちでもできるけどUniRxを推したい) https://github.com/neuecc/UniRx/releases/download/7.1.0/UniRx.unitypacka このライブラリは、SubjectからReactiveProperty、MessageBrocker、その他諸々実装されているので、 デザインパターンの勉強をして、正解をこのライブラリで答え合わせするのもいいかも
40.
IObserverとは このライブラリの作者neueさん • UniTask • Magic
Onion • MasterMemory • ZString
41.
MVCとは ①入力(ダメージ) ModelView Controller Player ModelView Controller Timer ②Timerを2秒減らしたい ③2秒減らす ④Viewに変更を通知 ⑤タイマーの秒数を描画 Observer シングルトン 実装できた🎉
42.
IObserverとは
43.
IObserverとは まとめ • 共同開発するためには、アーキテクチャ(MVCなど)が必要な場合がある。 • アーキテクチャを作ったことによって何かができなくなる時は、デザインパターンで解決できるか考える •
オブジェクトの振る舞いを考えてコードを書く • このオブジェクトがするべきなのは表示。ロジックは持つべきではないとか。 • シングルトンを使ってみる • 使い方や用途は他にもあるけど、多用は禁止 • オブザーバパターンを使ってみる • 使い所を考えないとスパゲッティコードになる場合がある • 使って放置しているとメモリリークする可能性がある
44.
ご清聴ありがとうございました!
45.
UniTask(UniRx.Async) 非同期のライブラリ • Ienumeratorの代わり • await
asyncで制御できるUniTaskを発行できる Coroutine UniTask クリック待ちをawaitできる WWWをawaitできる Coroutineをawaitできる
46.
UniTask(UniRx.Async) 他にもいろいろとawaitで待つことができる Stateがtrueの間待つ 値が変化するまで待つ 複数のUniTaskを待つ キャンセル処理がめんどくさいデメリットもある… CoroutineだとMonobehaviourからしか起動できないけど、 UniTaskはそうじゃないからキャンセルや止めるタイミングを 管理しなければならない。 効率よくなるけど、メモリリークの可能性も上がる
47.
DI(Dependency Injection) 設計図をコンテナに渡しておく Container PlayerView PlayerController ①PlayerControllerをコンテナに登録! ②PlayerControllerください! ③どうぞ!
48.
DI(Dependency Injection) ↑設計図をコンテナに渡しておく [Inject]でPlayerControllerを→ 受け取る 自分で生成しなくてよくなる メリット • テストが書きやすくなる •
インスタンスの管理がしやすくなる
49.
ご清聴ありがとうございました!
Editor's Notes
それぞれのゲームオブジェクトに違うスクリプトをアタッチすると思います。すごく正しいです。 ここで、CubeのオブジェクトからImageのオブジェクトを操りたい時はどうしますか?
GameObject.Find()で名前から検索はしてないですよね…? これ文字列からゲームオブジェクトを探してくるので、Updateとかで使うととっても重い処理になりますし、シーン上は同一nameのオブジェクトが存在できるので、例えば敵を生成した時に名前が一緒だとどっちを取得してくるかわからないです。
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
OnClickがpublicで公開されてしまう。 エディターに戻って毎回設定し直されないといけない。 ここで指定したい関数が他のオブジェクトの関数だったりするかもしれない
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
ここから中身を作っていきます
Pub subとはちょっと違う。。。
ここから中身を作っていきます
Pub subとはちょっと違う。。。
Pub subとはちょっと違う。。。
ここから中身を作っていきます
Pub subとはちょっと違う。。。
Pub subとはちょっと違う。。。
Pub subとはちょっと違う。。。
Pub subとはちょっと違う。。。
Pub subとはちょっと違う。。。
Pub subとはちょっと違う。。。
Download now