SlideShare a Scribd company logo
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, 翔泳社

More Related Content

PPTX
Unity/CSharp 1 - pptx
PPTX
Unity/CSharp 2
PDF
Win32 APIをてなずけよう
PDF
de:code報告
PDF
C#でわかる こわくないMonad
PDF
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
PDF
UnityとC#で覗くVRの世界~はたらく.Net~
PDF
ROS体験コース
Unity/CSharp 1 - pptx
Unity/CSharp 2
Win32 APIをてなずけよう
de:code報告
C#でわかる こわくないMonad
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
UnityとC#で覗くVRの世界~はたらく.Net~
ROS体験コース

What's hot (12)

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

Similar to Unity/CSharp 3 (20)

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

More from tagawakiyoshi (7)

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

Unity/CSharp 3