SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Unity(C#)講座3
Version1.1 (2019.06.26)
自己紹介
名前: Boltz
所属: 長崎経済大学3年
好きな性: 多態性(Polymorphism)
UnityC#講座のスライドを
クラウドとブロックチェーンとIoTで
インタラクティブに生成する超高性能AI
たまにスライド生成に失敗する, 助けてくれ!!!
目次
•オブジェクト指向(初級)
•2Dシューティング
到達地点と概要
前提条件
•環境: Unity 2018.4.0.f1
• Unityはバージョンで挙動がかなり異なることも
• 間違えずにダウンロードしてください
• また、必須ではないがUnityHub経由の利用が便利
•エディタ: VisualStudio2017
• VimでC#を書いている人は我慢してくれ
• 2019とかでも大して動作は変わらない(はず)
前提条件
•C言語について理解がある
• 構造化プログラミングの説明は速を上げます
• C言語との差分を埋める説明の仕方をします
•基本的な情報科学の知識がある
• 基本情報技術者が体系的に学べていい感じ
• ネットワーク, データベース(SQL), アルゴリズム,
データ構造, ハードウェアの分野(大雑把)
到達地点
•自分の思い描くゲームを作れるように
なる
• そのために、必要な処理を他から持ってくることが
できる or 自分で実装できるようになる)
• たとえ他から持ってきた処理でも、ある程度までは
中身が解読できる
到達地点
•Unityチュートリアルをやっていく
• ただしコードの写経はしないように
• Unityの操作方法を学ぶためだけの教材ではない
ので!!!
•その前にC#のコードの意味を学習す
る
オブジェクト指向
オブジェクト指向
• 変更に対して柔軟に対応するための仕組み
• 頻繁に変更されそうな箇所をクラスに抽出
• それでは具体的にどう(C#で)プログラミン
グしたらいいの?
• 「オブジェクト指向三原則」が存在する!!
• ちなみにJavaやC++では実現方法や用語が異なり
ます(プロパティとか)
オブジェクト指向三原則
• 継承
• 上位クラスのもとに下位クラスを定義するとき、下位クラスに上位クラ
スの属性が受け継がれる
• 規格(インターフェース)を定義して、クラスに規格をもたせられる
• カプセル化(実装の隠蔽)
• オブジェクトの内部をブラックボックス化することで、使用者が内部構
造を知らなくてもよいようにすること
• Getter / Setter (後述のプロパティ)はカプセル化を実現するための手段
なことに注意!!
• ポリモーフィズム(多態性)
• 同じメッセージを送っても受け手によって行われる操作が異なる
継承(再掲)
年齢
わらう
真顔になる
Person
細長さ
RedLongPerson : Person
年齢(変数), わらう(関数), 真
顔になる(関数)も利用でき
る!
赤くなる
MonoBehaviorクラスの継承(再掲)
•Start, UpdateなどはMonoBehaviorで定義さ
れている
•Unityで使用できる便利な機能を使うため
に引き継いでいる
• StartやUpdateなど
カプセル化
• 内部構造を知らないでも、適切なメッセー
ジを送ることでそのクラスが使用できる
• 以下にカプセル化を実現する要素を示す
• アクセス修飾子
• プロパティとフィールド
アクセス修飾子
• その変数に外部のアセンブリ(クラスな
ど)からアクセスできるかを規定する
• public, privateなどがある
• 簡単にまとめたものを次のページに貼って
いる
アクセス修飾子(再掲)
privateprotectedinternal
public
MethodM
M
MアセンブリA
public
アセンブリB
M
別のクラス 派生クラス
M
プロパティ
• 外からはメンバ変数のように見え、中では
メソッドのように振る舞う
• まず変数を小文字先頭で定義して
(例: int variable;)
プロパティを同じ型で定義する
(例: int Variable {get; set; })
プロパティ
• プロパティ(getter, setter)の実装例
• 基本的にデータを保持する変数を小文字先頭
(hitPoint)で、同じ型のプロパティを大文字先頭で
定義(HitPoint)
• 自分に都合の悪い値が与えられたら、加工するプ
ロパティを作ってみる
• 最大HPを超えたHPが与えられると最大HPに直す
• 0より低いHPが与えられると0に直す
プロパティ
プロパティ(参考動画)
• https://twitter.com/MinoDriven/status/1142926621583
663104?s=20
• すべてにgetter / setter をつければいいものではない
• データへアクセスできるかどうかも含め考えていこう
public プロパティ名 {
get{ ~~ }
private set{ ~~ }
}
ポリモーフィズム(多態性)
• 継承やインターフェース実装をしたクラスに同名
の関数を定義(上書き)できる
• 引数の型によって関数のふるまいを変化させられ
る(オーバーロード)
• クラスによって演算子(+とか-とか)の意味まで変
えられる
• Unityでは<GetComponent>()でインターフェース
を捕まえる方法をよく使う
Dog / DogScript (Class)
+ Bark()
Cat / CatScript (Class)
+ Bark()
Owner (Class)
動物たちに鳴いてほしいな!!
Dog / DogScript (Class)
+ Bark()
Cat / CatScript (Class)
+ Bark()
Owner (Class)
Dog.Gameobject.
GetComponent<DogScript>().
Bark()
Cat.Gameobject.
GetComponent<CatScript
Bark()
Dog / DogScript (Class)
+ Bark()
Cat / CatScript (Class)
+ Bark()
Owner (Class)
Dog.Gameobject.
GetComponent<DogScript>().
Bark()
Cat.Gameobject.
GetComponent<CatScript
Bark()
同じような関数をまとめられないかな...
IAnimal (Interface)
+Bark()
Dog (Class) Cat (Class)
Owner (Class)
実装 実装
IAnimal (Interface)
+Bark()
Dog (Class) Cat (Class)
Owner (Class)
同じ関数はIAnimal (Interface)に
まとめました!!
実装 実装
IAnimal (Interface)
+Bark()
Dog / DogScript (Class) Cat / CatScript (Class)
Owner (Class)
実装 実装
Dog.Gameobject.
GetComponent<IAnimal>().
Bark()
Cat.Gameobject.
GetComponent<IAnima
Bark()
IAnimal (Interface)
+Bark()
Dog / DogScript (Class) Cat / CatScript (Class)
Owner (Class)
実装 実装
場にあるAnimalインタフェースを実装した
オブジェクトをすべて鳴かせる: Bark()させる
ことも可能!!
ポリモーフィズム(多態性)
• IPAの試験とか一般的な教本とかでは「抽象クラ
ス」「親クラス」を継承した「子クラス」の関数
呼び出しなどが例に出されることも
• ただ、is aの関係にない継承や、多重継承が嫌われ
ている観点からインタフェースで多態性を実現す
ることが多い気がする
オブジェクト指向(まとめ)
• 最初はわからんかも!!
• ただ、3要素「継承」「カプセル化」「ポ
リモーフィズム」は頭の片隅に置くように
• classやオブジェクト同士をベタベタに結合
させると、後からの修正が大変になる
• 基本情報技術者などで出てくる概念「モジュー
ル結合度」について学習してみては
余談(読み物): 軽いやつ
• お前は絶望的にプログラミングに向いてないから諦め
て刺身にタンポポ乗せる仕事でもやってろ / 古都こと :
https://megalodon.jp/2019-0102-2318-
11/https://note.mu:443/kotofurumiya/n/n31d401fce78
2
• 一時期Twitterで話題になった, 現在は削除された
• 色々なことが学べる良記事(変数名の付け方, エラーの読
み方, 学習の進め方など)
• 多分本題はタイトルの通りではないと思われるが...
余談(読み物): 重いやつ
• オブジェクト指向デザインパターン
• 頭のいい人の「問題」の解決策をパターン化した
もの(大雑把な説明)
• 「オブジェクト指向における再利用のためのデザ
インパターン」が元となっている(文教図書館に
ある)
• 他のプログラミングの教本でもしばしば言及され
るのでいくつか覚えておけばよさそう
それではUnityをやる
• https://unity3d.com/jp/learn/tutorials/projects/2
d-shooting-game-jp
• 注意: イントロダクションを読んで、素材を
ダウンロードすること!!
• https://unity3d.com/jp/learn/tutorials/projects/2d-shooting-game/getting-
started?playlist=46524
参考文献
マイケル・ディックハイザー, 三宅陽一郎ほか「ゲー
ムプログラマーのためのC++」2011, SBクリエイティ
ブ
五十嵐 祐貴, 岩永 信之「スラスラわかるC# 第2版」
2018, 翔泳社

Weitere ähnliche Inhalte

Was ist angesagt?

Wio Nodeを使った
高校生のIoTプログラミング体験
Wio Nodeを使った
高校生のIoTプログラミング体験Wio Nodeを使った
高校生のIoTプログラミング体験
Wio Nodeを使った
高校生のIoTプログラミング体験Hiroto Yamakawa
 
こんなに違う!Unityアプリケーション講座
こんなに違う!Unityアプリケーション講座こんなに違う!Unityアプリケーション講座
こんなに違う!Unityアプリケーション講座Unity Technologies Japan K.K.
 
はんなりPython #45
はんなりPython #45はんなりPython #45
はんなりPython #45hiroya akita
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理Kouji Matsui
 
若手がコミュニティを盛り上げよう!
 若手がコミュニティを盛り上げよう!  若手がコミュニティを盛り上げよう!
若手がコミュニティを盛り上げよう! Yuta Matsumura
 
普段はAndroid開発やってるけど、Tizenをさわってみたよ
普段はAndroid開発やってるけど、Tizenをさわってみたよ普段はAndroid開発やってるけど、Tizenをさわってみたよ
普段はAndroid開発やってるけど、TizenをさわってみたよShuichi Takaya
 
Nespのコード生成
Nespのコード生成Nespのコード生成
Nespのコード生成Kouji Matsui
 
.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみたm ishizaki
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:codeKouji Matsui
 
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介Yuta Matsumura
 
Uno Platform か Blazor
Uno Platform か BlazorUno Platform か Blazor
Uno Platform か BlazorHiroyuki Mori
 
C# runs anywhere, make anything
C# runs anywhere, make anythingC# runs anywhere, make anything
C# runs anywhere, make anythingYuta Matsumura
 

Was ist angesagt? (12)

Wio Nodeを使った
高校生のIoTプログラミング体験
Wio Nodeを使った
高校生のIoTプログラミング体験Wio Nodeを使った
高校生のIoTプログラミング体験
Wio Nodeを使った
高校生のIoTプログラミング体験
 
こんなに違う!Unityアプリケーション講座
こんなに違う!Unityアプリケーション講座こんなに違う!Unityアプリケーション講座
こんなに違う!Unityアプリケーション講座
 
はんなりPython #45
はんなりPython #45はんなりPython #45
はんなりPython #45
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
 
若手がコミュニティを盛り上げよう!
 若手がコミュニティを盛り上げよう!  若手がコミュニティを盛り上げよう!
若手がコミュニティを盛り上げよう!
 
普段はAndroid開発やってるけど、Tizenをさわってみたよ
普段はAndroid開発やってるけど、Tizenをさわってみたよ普段はAndroid開発やってるけど、Tizenをさわってみたよ
普段はAndroid開発やってるけど、Tizenをさわってみたよ
 
Nespのコード生成
Nespのコード生成Nespのコード生成
Nespのコード生成
 
.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:code
 
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
オンライン中心だから地方のコミュニティも見てみませんか? - Fukuoka.NETの紹介
 
Uno Platform か Blazor
Uno Platform か BlazorUno Platform か Blazor
Uno Platform か Blazor
 
C# runs anywhere, make anything
C# runs anywhere, make anythingC# runs anywhere, make anything
C# runs anywhere, make anything
 

Ähnlich wie Unity/CSharp 3

C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021Atsushi Nakamura
 
Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Atsushi Nakamura
 
C# で i phone ゲーム開発
C# で i phone ゲーム開発C# で i phone ゲーム開発
C# で i phone ゲーム開発Katsutoshi Makino
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6信之 岩永
 
ソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングRyohei Kamiya
 
160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBM160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBMToshiki Tsuboi
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべKaoru NAKAMURA
 
.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能TomomitsuKusaba
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介Mori Shingo
 
.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在TomomitsuKusaba
 
Core Graphics on watchOS 2
Core Graphics on watchOS 2Core Graphics on watchOS 2
Core Graphics on watchOS 2Shuichi Tsutsumi
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化DeNA
 
Unityの夕べ in Fukuoka
Unityの夕べ in FukuokaUnityの夕べ in Fukuoka
Unityの夕べ in FukuokaShinobu Izumi
 
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノートIoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノートKazumi IWANAGA
 
Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話You&I
 
Webプログラマの為のUnity入門
Webプログラマの為のUnity入門Webプログラマの為のUnity入門
Webプログラマの為のUnity入門Yusuke Ando
 
C#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouchC#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouchShin Ise
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今Yuki Igarashi
 

Ähnlich wie Unity/CSharp 3 (20)

Unity ゲーム開発
Unity ゲーム開発Unity ゲーム開発
Unity ゲーム開発
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
 
Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0
 
C# で i phone ゲーム開発
C# で i phone ゲーム開発C# で i phone ゲーム開発
C# で i phone ゲーム開発
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
 
ソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティング
 
160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBM160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBM
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべ
 
.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
 
.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在
 
Core Graphics on watchOS 2
Core Graphics on watchOS 2Core Graphics on watchOS 2
Core Graphics on watchOS 2
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
 
Unityの夕べ in Fukuoka
Unityの夕べ in FukuokaUnityの夕べ in Fukuoka
Unityの夕べ in Fukuoka
 
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノートIoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
 
Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話Dockerで.NET Core 3.0 GUIアプリを動かす話
Dockerで.NET Core 3.0 GUIアプリを動かす話
 
C#への招待
C#への招待C#への招待
C#への招待
 
Webプログラマの為のUnity入門
Webプログラマの為のUnity入門Webプログラマの為のUnity入門
Webプログラマの為のUnity入門
 
C#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouchC#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouch
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
 

Mehr von tagawakiyoshi

長崎大学グラフィックデザインセミナー: グラフィックデザインについて
長崎大学グラフィックデザインセミナー: グラフィックデザインについて長崎大学グラフィックデザインセミナー: グラフィックデザインについて
長崎大学グラフィックデザインセミナー: グラフィックデザインについてtagawakiyoshi
 
C-Lang-Class1-SlideShare
C-Lang-Class1-SlideShareC-Lang-Class1-SlideShare
C-Lang-Class1-SlideSharetagawakiyoshi
 

Mehr von tagawakiyoshi (7)

長崎大学グラフィックデザインセミナー: グラフィックデザインについて
長崎大学グラフィックデザインセミナー: グラフィックデザインについて長崎大学グラフィックデザインセミナー: グラフィックデザインについて
長崎大学グラフィックデザインセミナー: グラフィックデザインについて
 
Clang2018 class5
Clang2018 class5Clang2018 class5
Clang2018 class5
 
Clang2018 class4
Clang2018 class4Clang2018 class4
Clang2018 class4
 
Clang2018 class3
Clang2018 class3Clang2018 class3
Clang2018 class3
 
Clang2018 class2
Clang2018 class2Clang2018 class2
Clang2018 class2
 
ecml-2019-slide
ecml-2019-slideecml-2019-slide
ecml-2019-slide
 
C-Lang-Class1-SlideShare
C-Lang-Class1-SlideShareC-Lang-Class1-SlideShare
C-Lang-Class1-SlideShare
 

Unity/CSharp 3