02.プログラマー 説明会 IN 九州 2015

Preview:

Citation preview

1

プログラマーPROGRAMMER

2

PROGRAMMER

● 入社: 2009 年  ●福岡本社勤務

プログラマー 西山 慶

開発タイトル 「NARUTO―ナルト― 疾風伝 ナルティメットストーム2」「NARUTO―ナルト― 疾風伝 ナルティメットストーム3」 

現在は新規未発表プロジェクトにてタイトルを開発中

株式会社サイバーコネクトツー

3

アジェンダ

1.西山の学生時代“落ちこぼれ”からの巻き返し

2. “ 受かる人”と”受からない人”の差とは

3.まとめ

4.番外編:エンジンを触ってほしい!

5.書籍紹介

西山の学生時代“落ちこぼれ”からの巻き返し

4

5

西山の学生時代

最初に私の学生の頃の話をしたいと思います。

その前に。・・・・・・

6

西山の学生時代

この学生の頃の話で私が伝えたい事は

“ 確実なステップアップ”という点を覚えていてください。

7

西山の学生時代

私の学校は3年制の専門学校でして、そのうち2年間は学校に、3年生にあがってからは

CC2 のインターンに行っていました。

ですので、学校にいた2年間の事を中心に話していきます。

学生 3 年間の私 その1

8

西山の学生時代

○ 1年生の前期~後期中盤まで落ちこぼれ、 後期の終盤から巻き返しを図る

○ 1年生の終盤~2年生の頭で2Dの 簡単なゲームを制作

○ 2年生の間に 2D と 3D の シューティングをそれぞれ制作

学生 3 年間の私 その2

9

西山の学生時代

○ 2年生中に 3D のシューティングを制作、 卒業・進級制作展にて展示

○ 卒業・進級制作展で当時 CC2 のプログラマーの マネージャーの方から声がかかる

○ 3年生にあがる頃には CC2 のインターンである プログラムマスターコースに入っていた

10

西山の学生時代

私は学生時代の1年生時はいわゆる

“ 落ちこぼれ”でした。

11

西山の学生時代

1 年時の私 成績とやる気のグラフ

4 月 1 月末9 月 10月

11 月頭

12月

7 月

12

西山の学生時代

1 年時の私

C言語を学習し、難なくこなしていく

成績上位

ポインタの学習に入る

ポインタで躓く

双方向リストで脳内が停止

4 月 7 月 9 月 10月

10 月末

13

西山の学生時代

1 年時の私

勉強をしなくなる

成績が下から数えた方が早い位置に落ちる この状態が

3 ヵ月続く

11 月頭

1 月末12 月

14

西山の学生時代

見ての通りひどい有様です。

15

西山の学生時代

もうすぐ2年生にあがろうとする頃「このままではいかん!!」

と奮起し、巻き返しを図ろうとします。

躓いていたポインタは最初から勉強しなおし、先生や友人に教えてもらったりしながら、

なんとか理解し乗り越えました。

16

西山の学生時代

が。・・・・・・

17

西山の学生時代

すでに時期は1年生終盤。

私はC言語を理解出来たくらいの状態

 です。

かたや、同じクラスの周りのみんなは2Dのゲームを作り始めていました。

18

西山の学生時代

そんな状態の私がまずしたこと

“ 次に進むにはどうすればいいか”

を考えました。

考えた結果

19

西山の学生時代

○ C言語を1からやり直し、基礎をしっかりと固める。○ 2Dゲームを作るための勉強を始める。○ 2年生にあがるまでに、 なんでもいいから1つ2Dのゲームを作る。

上記のことをすれば、確実に次に進めるのではないか、と思いました。

考えた結果

20

西山の学生時代

○ C言語を1からやり直し、基礎をしっかりと固める

>2Dのゲームを作る際に、>C言語の部分で躓かないようにするための基礎固め。

>復習することでより理解を深める。

考えた結果

21

西山の学生時代

○ 2Dゲームを作るための勉強を始める。

>2Dゲームを作るための基礎部分。>画像の表示方法から、入力や音を出すための仕組みなど。

>1つずつ丁寧に勉強。

考えた結果

22

西山の学生時代

○ 2年生にあがるまでに、 なんでもいいから1つ2Dのゲームを作る。

>なんでもいいから完成させることを目標に。>今の知識の量では、いきなり大きなものはすぐには作れない。>作れないものを作るよりは、完成品を目指す。>この時は、簡単な落ちものゲームを目標にしました。

23

西山の学生時代

1 年生時の遅れがあるため、悠長にしていられない状況ではありました。

ですが、スピードを重視して学んだことが疎かになるよりはいいと思い、

1つずつ丁寧に進める事にしました。

24

西山の学生時代

3つに重点を絞って進めていった結果、2年生にあがるまでには各項目を無事達成する事ができました。

この時、私は思いました。

25

西山の学生時代

“ このやり方はすごくいい”

“項目を分け、重点的に学ぶ事は確実に前に進める”

26

西山の学生時代

無事2Dのゲームを作ることができ、2年生にあがった私ですが、

クラスのみんなとは差がついたままでした。

27

西山の学生時代

また、私の学校では2年生からC++言語と3Dの勉強が始まるのですが、

3Dの授業は一定以上の成績でないと受講ができない、という制度がありました。

私は成績が足りず、3Dの授業は受講ができずにいました。

28

西山の学生時代

この時の私は「クラスのみんなとの差を埋めたい、

むしろみんなよりも前に進んでやろう」と思っていました。

それと、単純に3Dの授業が

受講できない事が悔しかったのです。

29

西山の学生時代

というわけで、 1 年生の時と同様に、

“ どうすればいいか”

をまた考えました。

考えた結果

30

西山の学生時代

○C++ 言語を覚える。○C++ 言語を使った2Dのゲームを作る。○ 作ったゲームで3Dの授業を受講できるようにする。

今度は、この項目に要点を絞りました。

考えた結果

31

西山の学生時代

○C++ 言語を覚える。

> C++ 言語をいち早く覚えてみんなより先に進む!>それでも疎かにしてはいけないので、早く丁寧に。

考えた結果

32

西山の学生時代

○C++ 言語を使った2Dのゲームを作る。

>C++言語に慣れるためにゲームを1つ作る。>1年生の頃に作ったのは簡単な落ちものゲームだったので、>ゲームのプログラミングの基礎も前に進めたい。>ある程度要素が複合しているシューティングゲームを選択。

考えた結果

33

西山の学生時代

○ 作ったゲームで3Dの授業を受講できるようにする。

>悔しかったので>C++を使った2Dのゲームを作って3Dの授業を>受講できるように先生に頼み込んでみようとしました。

34

西山の学生時代

今回は少し大きめなステップアップを図ったため、

少し時間がかかったのですが、クラスのみんなより一歩手前くらいの所までは

追いつく事ができました。

C++言語に関しては私が一番最初に覚え、友人に教えて

などしていたりしました。

35

西山の学生時代

そして、悔しかった本命の3Dの授業ですが、

作った作品を先生に見せたところ、

「よくもまぁここまで巻き返したな」

と、無事3Dの授業の受講の許可をもらいました。

36

西山の学生時代

以降、 3D の勉強が始まるのですが、内容はそれぞれ 3D の勉強だったりと違います

が、勉強の仕方は一緒で、

“ 次に進むためにどうすればいいか考え”“項目を洗い出しその要点を勉強する”

という流れは変わりません。

37

西山の学生時代

以降は冒頭にも書きましたが、” 確実なステップアップ”をしつつ、

3D のシューティングを制作しました。

その作品を卒業・進級制作展に出展。当時の CC2 のプログラマーマネージャーの方

に声をかけて頂き、インターンを開始。

そのまま CC2への入社、現在の私に至ります。

38

西山の学生時代

次に進むためにどうすればいいか考え、項目を洗い出しその要点を勉強する

“ 確実なステップアップ”

これで私は前に進むことができ、落ちこぼれから脱却をすることができました。

39

西山の学生時代

応募した履歴書と、卒業・進級制作展に出展した作品を

一部紹介します。

40

西山の学生時代

41

西山の学生時代

ここで作品。

“ 受かる人” と”受からない人” の差とは

42

43

受かる人と受からない人の差

“ 受かる人”と”受からない人”

の差とは何でしょうか?

44

受かる人と受からない人の差

すごいコードが書ける!

書いたコードの量が凄まじい!

知識の量!

頭がいい!

45

受かる人と受からない人の差

すごいコードが書ける!

書いたコードの量が凄まじい!

知識の量!

頭がいい!

46

受かる人と受からない人の差

“ 勉強の仕方を知っている”

ということ。

47

受かる人と受からない人の差

勉強の仕方を知っているとは

“目標があり、その目標を達成する手段を知っている”

48

受かる人と受からない人の差

“ 目標があり、その目標を達成する手段を知っている”

とは、つまりどういうことなのか。

具体的に見ていきましょう。

49

受かる人と受からない人の差

A さんと B さんは同じ時期に同じ専門学校に入り、ゲーム作りの勉強を始めました。

A

B

面白いゲームをつくるぞー!

いっぱいゲームつくるぞー!

A さんと B さんの例

50

受かる人と受からない人の差

最初は言語を覚える所から始まります。 C++ 言語は二人とも難なく覚える事が出来ました。

A

B

Class の使い方を覚えた!継承の使い方を覚えた!

テンプレートの使い方を覚えた!operator を覚えた!

A さんと B さんの例

51

受かる人と受からない人の差

言語を覚えた二人は、学校の先生から 2D ゲーム制作のお題をもらいました。

A

B

いよいよゲーム作りだ!

面白くするぞ!

A さんと B さんの例

52

受かる人と受からない人の差

【受かる人(Aさん)と受からない人の(Bさん)】

A さんは最初、いくつかの目標を立てました。

A最初は画像を表示してみよう。

表示できたらその画像を動かしてみて、回転や拡縮もやってみよう。

それができたら今度はベクトルの計算をやってみて 。・・・・・・

A さんの場合

53

受かる人と受からない人の差

B さんはとりあえずやってみることにしました。

B

2D とか画像表示できたらそれで OK でしょ!

がんがん作るぜ!!

B さんの場合

54

受かる人と受からない人の差

【受かる人(Aさん)と受からない人の(Bさん)】

A さんは順調に立てた目標をこなして進んでいきます。

A

画像の表示、回転と拡縮ができた!ベクトルの計算もできた!

そしたら次は衝突判定をやってみよう。まずは円と円、次に円と四角を 。・・・・・・

A さんの場合

55

受かる人と受からない人の差

B さんは分からない部分はあるのですが、とにかく前進。

B

画像がずれて表示されるけど、まぁいっか。表示はできてるし。

ベクトル?うーんよく分からないけど動いてるし大丈夫でしょ。

B さんの場合

56

受かる人と受からない人の差

二人とも完成です。

A

B

うまくいかない所はあったけど、そこは次で挑戦だ!

完成!

完成!!神ゲーできたぜー!!

A さんと B さんの例

57

受かる人と受からない人の差

次に 2 人は学校の先生から 3D のゲーム制作のお題をもらいました。

A

B

次は 3D だ。大変そうだけどやりがいがありそうだ。

3D だ!2D に軸がひとつ増えただけでしょ!

簡単簡単!

A さんと B さんの例

58

受かる人と受からない人の差

【受かる人(Aさん)と受からない人の(Bさん)】

A さんは 2D ゲームの時と同様、いくつか目標を立てました。

Aまずは三角形のポリゴンを

表示してみよう。色も指定できるようにしてみよう。

そしたらそのポリゴンを動かしてみよう。

そのためには行列が必要で 。・・・・・・

A さんの場合

59

受かる人と受からない人の差

B さんはとにかくやってみることにしました。

B

2D ゲーム時と同じでうまくいくだろう!

B さんの場合

60

受かる人と受からない人の差

A さんは一つずつ順調に進めていきます。

A ポリゴンの表示もできて、色の指定もできた。

ポリゴンを動かすのも行列でやってみた。

行列は概念がまだぼんやりとしてるから、深い理解を後からちゃんとしないと。

よし、じゃあ次はカメラを動かしてみて 。・・・・・・

A さんの場合

61

受かる人と受からない人の差

B さんは分からない事だらけですが、とにかく前進。

B

行列? ベクトル?

良く分からないけどポリゴン表示させたし動いてるし

OKOK 。

結構簡単じゃん!

B さんの場合

62

受かる人と受からない人の差

難しく、理解しがたい部分がありつつも、一つ一つ紐解いて、しっかりとすすめる A さん。

A

カメラはできたけど、まだ行列がきちんと理解しきれてないな。

空間っていう概念が理解出来てないな。

行列にはベクトルが入っていて 。・・・・・・

A さんの場合

63

受かる人と受からない人の差

とにかくいろいろ試してみる B さん。

B

ポリゴンの回転ってどうやればいいの ?・・・・・・

平行移動と回転って両方やるにはどうしたら 。・・・・・・

とりあえず頂点に値足してみて 。・・・・・・

B さんの場合

64

受かる人と受からない人の差

A さんは一つずつ目標をこなして無事 3D のゲームが完成しました。

A

よし、完成!難しいけど楽しかった!

まだうまくできてない部分があるからそこを次回は直そう!

A さんの場合

65

受かる人と受からない人の差

B さんは 。・・・・・・

B

ZZZ zzz ......

B さんの場合

66

受かる人と受からない人の差

A さんと B さんのこの差はなんでしょうか?

“ 受かる人”こと A さんの場合

67

受かる人と受からない人の差

 目標が定まっている

 一つ一つ順序を考えて勉強

 基本を疎かにしない

 何をすれば先に進めるか理解できている

 

A

“ 受からない人”こと B さんの場合

68

受かる人と受からない人の差

 目標はあるがあいまい

 深く考えずとにかく進める

 基本を無視

 何が分からないのが分かっていない

 

B

......

69

受かる人と受からない人の差

A さんはまさに理想的な姿です。素晴らしい。

では、その A さんのようになるには?

次からその根本的な部分に触れていきます。

70

受かる人と受からない人の差

 ゲームのプログラミングには 段階がある

 自分を分析をしよう

 目的を分解していこう

71

受かる人と受からない人の差

ゲームのプログラミングには段階がある

72

受かる人と受からない人の差

ゲームのプログラミングには、大きく 3 つの段階があります。

ではその段階とは?

ゲームのプログラミングには段階がある

ゲームのプログラミングには段階がある

73

受かる人と受からない人の差

①C 言語や C++ 言語、その他言語の 「言語を覚える」

②数学や描画ライブラリなどの 「ゲーム表現のための基礎」

③おもてなしやさわり心地などの 「ゲーム表現そのもの」

ゲームのプログラミングには段階がある

74

受かる人と受からない人の差

①C 言語や C++ 言語、その他言語の 「言語を覚える」

> C 、 C++ 、 C# 、 Java 、 Basic 、 PHP 、 Python>数ある言語の仕様や扱い方。

>”言語そのものを覚える”

ゲームのプログラミングには段階がある

75

受かる人と受からない人の差

②数学や描画ライブラリなどの 「ゲーム表現のための基礎」

> DirectX や OpenGL 、描画を行うためのライブラリや、>サウンドを扱うためのライブラリ、ベクトルや行列などの>数学的な部分、衝突判定、などなど。

>”ゲームの表現を行うための基礎”

ゲームのプログラミングには段階がある

76

受かる人と受からない人の差

③おもてなしやさわり心地などの 「ゲーム表現そのもの」

>ゲーム上での気持ちよさや手触り感など、>いわゆる「おもてなし」の部分。>おもてなし以外にもゲームのロジックを考える時など。

>”ゲーム表現そのもの”

ゲームのプログラミングには段階がある

77

受かる人と受からない人の差

①「言語を覚える」②「ゲーム表現のための基礎」③「ゲーム表現そのもの」

これは学生の時には気づきにくく、また誰も教えてくれない。

私がこの事に気付いたのは、会社に入ってからでした。

ゲームのプログラミングには段階がある

78

受かる人と受からない人の差

①「言語を覚える」②「ゲーム表現のための基礎」③「ゲーム表現そのもの」

①の言語を覚える段階は1つ1つ丁寧に覚えていけば、さほど時間もかからずに覚えていく事ができます。

また、 1 つの言語を覚えると、他の言語を覚える時に共通している部分もあって、覚える速度も上がります。

ゲームのプログラミングには段階がある

79

受かる人と受からない人の差

①「言語を覚える」②「ゲーム表現のための基礎」③「ゲーム表現そのもの」

②は一番時間がかかる上に覚える事も多く、多くの学生さんはここで挫折する人が多いです。ですが、この②がしっかりしていないと、ゲームは作る事ができません。

ゲームのプログラミングには段階がある

80

受かる人と受からない人の差

①「言語を覚える」②「ゲーム表現のための基礎」③「ゲーム表現そのもの」

③は、②が出来て初めて成り立ち、行きつくまでに時間がかかります。また、③と②は常に繰り返し反復を行って、1つずつ知識を身につけていきます。

ゲームのプログラミングには段階がある

81

受かる人と受からない人の差

①「言語を覚える」②「ゲーム表現のための基礎」③「ゲーム表現そのもの」

ステルスゲームで敵がプレイヤーを探す挙動を例に出すと、視界というのは内積で判断をし、これは②で行うベクトルの知識が必要になります。内積を使い、数値の判断を行い”見つける”という挙動は③の部分になります。

ゲームのプログラミングには段階がある

82

受かる人と受からない人の差

①「言語を覚える」②「ゲーム表現のための基礎」③「ゲーム表現そのもの」

この様に、③と②は連動していて、②の知識が多ければ多いほど、③で行える表現の幅が広がります。

ゲームのプログラミングには段階がある まとめ

83

受かる人と受からない人の差

①C 言語や C++ 言語、その他言語の 「言語を覚える」

②数学や描画ライブラリなどの 「ゲーム表現のための基礎」

③おもてなしやさわり心地などの 「ゲーム表現そのもの」

84

受かる人と受からない人の差

自分を分析しよう

自分を分析しよう

85

受かる人と受からない人の差

なぜ自分を分析するのか?

それは、

自分自身の実力を把握

するためです。

自分を分析しよう

86

受かる人と受からない人の差

目標を立てても、自分の実力が分からないと、何をすればいいのかが分からない。

A

自分を分析しよう

87

受かる人と受からない人の差

自分の実力が分かると、目標まで”差”が分かる。

A

自分を分析しよう

88

受かる人と受からない人の差

後はその”差”をどうやって埋めるか、段階を踏んでいく。

A

自分を分析しよう

89

受かる人と受からない人の差

自分の実力を知らないまま、ただ先に進もうとすると

“何が分からないのかが分からない”

状態になってしまう事が多いです。

B......

90

受かる人と受からない人の差

目標を分解しよう

目標を分解しよう

91

受かる人と受からない人の差

目標はあるものの、どうやってその目標を達成すればいいか、手段が分からない場合もあります。

目標を分解しよう

92

受かる人と受からない人の差

その時は、とにかくやってみる事も大切。

ただし、本当に何でもいいからやってしまうと、見当はずれな事をやりかねません。

なので、目標の分解を行います。

目標を分解しよう

93

受かる人と受からない人の差

あなたは今から 3D のゲームを作ることになりました。しかし、 3D のゲームは今まで作った事がありません。

「どうやって作っていくのか想像できない 」・・・・・・「いまいち分からない 」・・・・・・

なら分かりそうな所から攻めてみましょう。

目標を分解しよう

94

受かる人と受からない人の差

3D のゲームなので、”3D でモデルを表示させないといけない”

これくらいなら分かっています。じゃあ、まずは”表示”という部分をやってみよう!

完成A 表示

目標を分解しよう

95

受かる人と受からない人の差

どうやら 3D では”頂点”というものがあり、それが 3 つ集まって”ポリゴン”というものになることが分かった。

そのポリゴンがいっぱい集まったものが”モデル ( メッシュ )” と呼ばれているらしい。

完成表示

ポリゴン

A

目標を分解しよう

96

受かる人と受からない人の差

(表示のさせ方を調べて)“ 表示”ができた!

じゃあ次は表示させたポリゴンを”移動”させてみよう!移動させるためにはベクトルと行列を 。・・・・・・

完成

表示

ポリゴン A 移動

97

受かる人と受からない人の差

と、いう風に。

目的を小さく分解して、次に進むための方法をやってみて、確実に進むための方法を探していく。

確実に前に進みつつ、目標を目指す。

そのために目的を分解する。

目標を分解しよう

まとめ

98

99

まとめ

“ 勉強の仕方を知っている”

ということ。

“ 受かる人”と”受からない人”の差

100

まとめ

勉強の仕方を知っているとは

“目標があり、その目標を達成する手段を知っている”

“ 受かる人”と”受からない人”の差

101

まとめ

 ゲームのプログラミングには 段階がある

 自分を分析をしよう

 目的を分解していこう

“ 受かる人”と”受からない人”の差

番外編:ゲームエンジンを触ってほし

い!

102

103

エンジンを触ってほしい

ある程度実力がついてきた人は、ぜひゲームエンジンを触ってください。

UnrealEngine や Unity など、現在はお手軽に触れるものがいくつもあります。

逆に、すでにエンジンを触った事がある人は、エンジンのいい所を自分で実装してみてください。

ゲームエンジンを触るといいこと

104

エンジンを触ってほしい

○ ゲームを作る上で、いろんな人の考え方が詰まって おり、触るだけでも知識の幅が広がります。 例えばオブジェクトの管理方法だったりとか。

○ エンジンには、大抵エディターがついていて、 簡単にゲームを作る事が出来る半面、 その”簡単”を行うための裏側がいかに大変かを 知ることができます。

ゲームエンジンを触るといいこと

105

エンジンを触ってほしい

○ ゲーム部分だけではなく、ファイルの管理や、 アセットの管理、扱い方など、基礎的な部分でも 非常に参考になります。

○ ゲームの作り方そのものの考え方が、 エンジンを触る前と後で変わり、 よりステップアップ出来ます。

106

エンジンを触ってほしい

ぜひゲームエンジンを触ってください。

107

エンジンを触ってほしい

ゲームエンジンでなんとなくゲームが完成しても、よほど完成度が高くなければ、

” プログラマー”として合格は出来ません。(スクリプターとしてはアリかもしれません)

ゲームが作れていても、根本的にプログラミングなどの基礎部分が出来ていないと、”プログラマー”としての

仕事が出来ないからです。

ゲームエンジンを使って作品を作る事はかまいませんが、この点だけ注意してください。

プログラマー向け注意喚起

参考書籍・ WEB サイト紹介

108

109

参考書籍紹介

リーダブルコードより良いコードを書くためのシンプルで実践的なテクニック

○読みやすいコードを書くための 手法が読みやすい形で載っています。 非常に有用。

著 者:ダスティン・ボズウェル  /    トレバー・フーシェ出版社:㈱オライリー・ジャパン

110

参考書籍紹介

ゲームプログラマになる前に覚えておきたい技術

○C++ が書けるようになって、 いざゲームを作りたいけどどうすればいいか 分からない人にお勧めする本。 ゲームの作り方が学べます。

著 者:平山 尚 ( 株式会社セガ )出版社:㈱秀和システム

111

参考書籍紹介

ゲームコーディング・コンプリート一流になるためのゲームプログラミング

○ ゲームは作れるようになったけど、 もう一歩ステップアップした人向け。 ゲーム開発に関わる非常に有用な 内容がまとめられています。

著 者:マイク・マクシャフリー出版社:㈱ソフトバンククリエイティブ

112

参考 WEB サイト紹介

CEDEC Digital Library

○日本で毎年行われる CEDEC 。 その公演に使われた資料が WEB 上で 配布されています。 技術だけでなく、講演者の方の 考え方にも触れることが出来ます。

URL : http://cedil.cesa.or.jp/

113

ゲームエンジン紹介

UnrealEngine4

○ 世界規模で扱われているゲームエンジン。 現在は無料で使用出来ます。 ソースコードも公開されているので、 ぜひ一度触ってみてください。

URL : https://www.unrealengine.com/

最後に

114

115

最後に

最後に、私から皆さんに伝えたい事は、

あきらめないでほしい

ということです。

116

最後に

私の学生時代、あきらめてしまった人たち

をいっぱい見てきました。

私自身がそうなりかけていました。

117

最後に

でも、今こうやって、ゲーム業界にプログラマーとしていることは、

辛い事もあるけど、すごく楽しいです。

この職につけて良かったと心の底から思っています。

118

最後に

だから

あきらめないでください。

119

最後に

今回の講義の内容が、少しでも皆さんのお力になれば幸いです。

ありがとうございました。

Recommended