SlideShare a Scribd company logo
Unityでゲーム作りを学ぼう2014
第3回
C#入門編 その2
担当
spi8823
各自
● 適当にVisual Studioか、MonoDiveloperを
起動しておいてください
● 今回扱う「クラス」というものは
Unityではきちんと扱えないので
今回はUnityは使いません
● 上のエディタも単体で起動しておいてください
前回のUniげーむ!
● 変数:値を保存しておく箱
● 関数:変数を使っていろいろする
● 繰り返し文:for~~で繰り返す
● 条件分岐:if~~で条件分岐
● 配列:変数がいっぱい
今日の予定
● 自己紹介(初参加の人がいれば)
● クラスとは?
● クラスの構造
● public, private
● クラスを作ってみよう!!
● ///
自己紹介
● 名前
● KMC-ID(あれば)
● KMCでどんなことをしたいのか
● KMCの外でどんなことをしているのか(趣味)
● 他に何かあれば
クラスとは?
クラスとは?
● ずばり、女子高生である
正確にいうと
● 例えば、「女子高生」や、「はさみ」など、
具体的なものを抽象化したもの
– 合ってるかどうかわからない・・・
● 要するに、ものの「設計図」だと思ってもらえ
ばいい
– っていう説明がよくされている
● 設計図を用いて、具体的なものを生成する
● 生成されたものを(クラス名)型の(変数名)
と呼ぶ
クラスは設計図
● 具体的なものを生成するのに
必要な情報はどんなものがあるのか?
– どんな変数を持っているのか
● その情報で具体的なものを作った時に
それはどのような振る舞いをするのか
– どんな関数を持っているのか
● というのがここでいう設計図のことである
女子高生で考えてみよう
● 「女子高生」クラスがあったとしましょう
● 女子高生の設計図とはどのようなものでしょ
う?
● 例えば、女子高生である、「涼宮ハルヒ」を
生成したいとします
「涼宮ハルヒ」を作る
● ハルヒを作るのに必要な情報(変数)は何か?
「涼宮ハルヒ」を作る
● ハルヒを作るのに必要な情報(変数)は何か?
– 名前
– 年齢
– 性格
– 服装
– おっぱい
– バスト
– ウェスト
– ヒップ   etc.....
「涼宮ハルヒ」を作る
● ハルヒを作るのに必要な情報(変数)は何か?
– 名前 : 文字列型
– 年齢 : 整数型
– 性格 : 性格型、もしくは列挙型(のちほど説
明)
– 服装 : 服装型、もしくは列挙型
– おっぱい : 整数型、もしくは文字型
– バスト : 整数型
– ウェスト : 整数型
– ヒップ : 整数型
「涼宮ハルヒ」を作る
● ハルヒは一体どんな行動(関数)をとるのか?
「涼宮ハルヒ」を作る
● ハルヒは一体どんな行動(関数)をとるのか?
– 走る
– しゃべる
– わめく
– 思いつく
– 命令する
「涼宮ハルヒ」を作る
● ハルヒは一体どんな行動(関数)をとるのか?
– 走る : void Run()
– しゃべる : void Speak(string 内容, 人 話し相手)
– わめく : void Shout(string 内容, 人 相手)
– 思いつく : 内容 conceive(きっかけ 何か)
– 命令する : void order(内容)
– などなど。。。
クラスの構造
● クラス名{
クラスが持っている変数たち(メンバ変数)
 初期化する特別な関数(後述)
 クラス特有の関数たち(メンバ関数)
 
}
初期化する特別な関数とは?
● そのクラスから具体的なもの(インスタンスと
呼ぶ)
を生成するときに、
どんなものを作るのか、という情報を言ってあ
げないといけない
● そのために使う関数を「コンストラクタ」と言
います
● これは、そのクラス名が関数の名前になった
特別な関数で、引数にはクラスが持つべき
情報を与える
● このようにして、変数の初めの状態を決めるこ
概念図
クラスについての
いろいろな情報が
書かれている
クラス
古河渚
毛利蘭
涼宮ハルヒ
初期化
インスタン
ス
女子高生の場合
● public(後述) JK{
string Name;
int Age;
Character character;
...
JK(string name, int age, …..){
….
}
void Run(){}
void Speak(){}
…...
}
早速クラスを作ってみたい
● その前にpublicとかいうものの正体を
public, private
● これらの意味は見てのとおり
– 公的な、私的な、という意味です
● どういう風に使うかというと
それが書かれているクラスや変数、関数に
どこからならアクセスできるのかを定める
● publicならどこからでもアクセスできるので、
とりあえずはpublicを使っておこう
作ってみよう
● エディタの
ファイル→新規作成→プロジェクト
→コンソールアプリケーション(適当な名前
を)
● Program.csというファイルができて、その中に
static void Main(~~)というのがある
– C#のプログラムはこの関数から動き始める
● Main()があるのも
Programというclassであることに注目
クラスを作る
● class Program{}の外に
public class JoshiKosei{ ~~ }と書き始めよう
● ~~の部分にクラスの内容を書いていく
メンバ変数の宣言
● そのクラスが持っておきたい変数(メンバ変
数)は
class ~~{}でくくった直下に宣言します
コンストラクタを書く
● 初期化のためのコンストラクタは、
返り値の型とか書かない、
そのクラスの名前を持った関数っていう感じで
書く
thisってなんぞや?
● this.~~と変数を指定しているのは
インスタンスを作った時に
指定しているのは自分自身ですよ、ということ
● 実は書かなくても自動でそう認識される
– 書いた方がわかりやすいこともあるし
冗長になることもある
メンバ関数の定義
● これもclass{}でくくった直下に定義
わかってきたかな?
● 早速今作った女子高生クラスの
インスタンスを作ってみよう
newでインスタンスを作る
● ここにかいてあるのは
● (クラス名)型の変数を宣言し、それと同時に
● new コンストラクタ(~~)で、
~~の情報を持った
インスタンスを生成し、
● それを宣言した変数に代入している
インスタンスに関数を実行させる
● そのあとに
Haruhi.Speak(); としているのは、
「Haruhi」という変数の中に入っている
インスタンスに対して、
● Speak(); という関数を実行しなさいと言って
いる
● これによって、
インスタンスが、それぞれ自分に特有の情報を
使って、クラスで設計された通りに行動してい
る
.
● この際、変数名.メンバ関数名となっている
が、
この「.」は「の」とか、「of」的なものだと
思ってもらえばOK
– ハルヒの喋るという行為をしろ、といった意味
● もちろん、変数名.メンバ変数名とすることで
そのインスタンスのメンバ変数を
呼び出すこともできる
– ハルヒの年齢を呼び出せ、など
再登場
● このようにして、外部からインスタンスの中身
に
アクセスされるときに、
「外部からは操作してほしくない!」という
変数や関数があったとします
● そういう時に、
先ほどとりあえずpublicにと言っていた部分を
● privateに変えます
● するとどうでしょう、Main()で実行する部分か
らは
見えなくなりました!
実装してみよう
● Speak関数の引数に整数をとって
その整数によって年齢だとかバストだとかを
言ったりするようにしてみそ
● 3分で
● その前にswitch文の説明をちょろっと
– switch(~~){
case oo: (~~ がooのときはここからbreakまで実
行)
~~~~~~~~   (何かしたいこと)
break;
case xx:  (~~ がxxのときはここを実行)
~~~~~
列挙型の説明
● ここで例えば、
インスタンスに性格を変数として持たせたいと
する
● 性格は何で表すのか???
– 数字で表す?
● 1のときは「明るい」など
● すごくわかりにくいです・・・
– 新たに性格型のクラスを作る?
● マンドクセ
● そこで列挙型ですよ
enum
● を使えば実態は数値だけど、わかりやすく表せ
る
● 種類だけをいっぱい用意したいときに便利
● 定義はこうする
enumの使い方
● 適当にメンバ変数に性格を足して
初期化するように改造しといてちょ~
鯖 読子ちゃん
● 突然ですが、外からメンバ変数を見られる際
に、
メンバ変数そのものではなく、
なにか操作したものを渡したいとき
● っていうのがあったとします
● 例えば、女子高生の鯖読子ちゃんは
実は37才なのですがとある事情で
高校生として生活を送っています
● Ageには37が代入されているのですが、
年齢を聞かれた時はそこから20を引いて
相手に教えます
プロパティ
● そうときにプロパティというものが使えます
● 「実装の隠蔽」といいます
● まず、普通に「age」というメンバ変数を用意
外から見えるとまずいのでprivateで
– 頭文字は小文字なのが一般的
● そして次のように書く
● public int Age
{
private set{ this.age = value; }
get{ return this.age – 20; }
}
こうすると
● int n = Yomiko.Age; とすると
nは17に、
● Yomiko.Age = 56; とかすると
setがprivateなのでエラーになる
– この代入のときの「56」などが
先ほどのset{}の部分の「value」になっている
● C#では、プログラムの堅牢性を高めるために
プロパティを用いた書き方が推奨されている
性的なクラス、変数、関数
● 今までやってきたことは「動的な」ことです
● 「動的な」ものとは、インスタンスによって
それぞれ異なっているもの、と思ってください
● 「動的な」があれば、「静的な」もあるわけで
静的とは?
● インスタンスが異なっても、その動作を
変えないクラスや変数、関数のことです
● そのようなものには「static」キーワードをつ
けます
● 例えば、女子高生の場合、
「性別」の変数はどのインスタンスにも関係な
く、
「女」であるので
● public static Gender gender = Gender.Female;
– 列挙型だ!!
● と書きます
いまはあんまり使わないね
● しかし、プログラミングをしていくと
後々、重要だということが分かります
● Unityでもstaticな関数を用意しておくと
インスタンスを作らなくても呼び出せて
超便利~だったり
クラスについて何か質問
● はありますか?
● 今のうちにじゃんじゃん質問してください
では
● これにてクラスの話は今のところ終わりです
● 継承やらインターフェースやらは
そのうちしゃべります(多分)
来週の予定
● いよいよ、コードを書きつつ、
実際にUnityでいろいろしていきます
● 次回(5月17日)の予定は
– Cubeの出し方、そしてその動かし方
– 物理演算させる、当たり判定をつける
– エディタ上で変数をいじって遊ぶ
– Prefabを使う
– などなど
新歓コンパ
● 5月24日にあります
● 食べます
● 新入生は無料です
● wikiにページがあるので、
自分の名前のところに○×をつけておいてくださ
い
– 参加する如何にかかわらず
● 参加してね!!
はぁ~、ちかれた

More Related Content

What's hot

【名古屋】2014/2/8 Unity勉強会1
【名古屋】2014/2/8 Unity勉強会1【名古屋】2014/2/8 Unity勉強会1
【名古屋】2014/2/8 Unity勉強会1
優之 田中
 
Unity2Dを使ったミニゲーム開発のすすめ
Unity2Dを使ったミニゲーム開発のすすめUnity2Dを使ったミニゲーム開発のすすめ
Unity2Dを使ったミニゲーム開発のすすめ
優之 田中
 
Blenderソースコードリーディング
BlenderソースコードリーディングBlenderソースコードリーディング
Blenderソースコードリーディング
Tetsuo Mitsuda
 
Blender+αの大発表会3-WebGLAddon
Blender+αの大発表会3-WebGLAddonBlender+αの大発表会3-WebGLAddon
Blender+αの大発表会3-WebGLAddon
naotaro0123
 
Live2Dモデリング部
Live2Dモデリング部Live2Dモデリング部
Live2Dモデリング部
naotaro0123
 
第3回ue4勉強会 in 大阪 201711 ue4界隈ニュース
第3回ue4勉強会 in 大阪   201711 ue4界隈ニュース第3回ue4勉強会 in 大阪   201711 ue4界隈ニュース
第3回ue4勉強会 in 大阪 201711 ue4界隈ニュース
com044
 

What's hot (6)

【名古屋】2014/2/8 Unity勉強会1
【名古屋】2014/2/8 Unity勉強会1【名古屋】2014/2/8 Unity勉強会1
【名古屋】2014/2/8 Unity勉強会1
 
Unity2Dを使ったミニゲーム開発のすすめ
Unity2Dを使ったミニゲーム開発のすすめUnity2Dを使ったミニゲーム開発のすすめ
Unity2Dを使ったミニゲーム開発のすすめ
 
Blenderソースコードリーディング
BlenderソースコードリーディングBlenderソースコードリーディング
Blenderソースコードリーディング
 
Blender+αの大発表会3-WebGLAddon
Blender+αの大発表会3-WebGLAddonBlender+αの大発表会3-WebGLAddon
Blender+αの大発表会3-WebGLAddon
 
Live2Dモデリング部
Live2Dモデリング部Live2Dモデリング部
Live2Dモデリング部
 
第3回ue4勉強会 in 大阪 201711 ue4界隈ニュース
第3回ue4勉強会 in 大阪   201711 ue4界隈ニュース第3回ue4勉強会 in 大阪   201711 ue4界隈ニュース
第3回ue4勉強会 in 大阪 201711 ue4界隈ニュース
 

Recently uploaded

アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
fisuda
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
Yoshitaka Kawashima
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
ooishi1
 

Recently uploaded (6)

アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
 

Unity入門講座その3