SlideShare una empresa de Scribd logo
1 de 50
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にページがあるので、
自分の名前のところに○×をつけておいてくださ
い
– 参加する如何にかかわらず
● 参加してね!!
はぁ~、ちかれた

Más contenido relacionado

La actualidad más candente

【名古屋】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-WebGLAddonnaotaro0123
 
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
 

La actualidad más candente (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界隈ニュース
 

Unity入門講座その3