30歳からのゲーム開発記録

30才未経験でSEに転職した人のブログ

【ゲーム開発記録②】Unityの公式チュートリアルをやってみる

こんにちわ。UUC1Hです。

前回のブログでUnityを使ったゲーム開発を行うことを宣言しましたが、何から始めていいのやら。。
「こういう時は公式チュートリアル」ということで、Unityの公式チュートリアルである玉転がしを作りました。

tutorial.unity3d.jp

 

■学んだことのメモ

・オブジェクトに色をつけるには、色付けしたMaterialをオブジェクトに貼る

・静的オブジェクトの登録方法(パフォーマンスやビジュアルの向上)

・Rigidbodyコンポーネントで物理演算機能を追加できる

・キーボードからオブジェクトを動作させる方法

・カメラを動かす方法

 ・FPSの視点

 ・TPSの視点

・Prefabとは

・接触判定

 ・OnTriggerEnter:判定のみのTriggerとの接触判定

 ・OnCollisionEnter:物理的な反射を持つColliderとの接触判定

 ・タグで指定し、特定のオブジェクトに対してだけ削除処理を適用

 ・特定のタグを持つオブジェクトと衝突したら、シーンの再読み込み

Canvasオブジェクト、Textオブジェクトを使用したUI

 ・CanvasオブジェクトのUI Scale ModeはScale With Screen Sizeへ

 ・指定したタグのオブジェクトの数を取得し、Textオブジェクトへ表示する

 ・非アクティブオブジェクトをアクティブにすることで、ゲームクリアを表現

 

このチュートリアルでは、以上のことを学びました。

1時間程度で終えれるチュートリアルですが、ボールをキーボードから操作し、ポイントをUIに表示し、ゲームクリア、ゲームオーバーと、ゲームとして成立する最低限の機能をつけることができました。
これは楽しい!!

そして、今後課題になってくるのが、開発時間の確保です。
平日はもちろん仕事し、帰ってくる時間はだいたい22時ごろ。。続けることを目標とし、以下のルールを自分に課したいと思います。

・1日の勉強時間は、最低5分(必ずUnityを起動させること)
・平日は、本やサイトのチュートリアルでインプットに努める。(変に悩んで時間を持っていかれないように)
・インプットの内容はブログに書くが、そこまで細かく書かない。(何を学んだか分かるメモ程度で)
・ゲーム開発を楽しんでやること!(ゲーム開発は子供のころからの夢だったんだよ)

さ、明日からは何を作ろうかな!

 

【ゲーム開発記録①】ゲームを作りたい

こんにちわ。
ブログを始めたのに、すっかりサボりまくっていたUUC1Hです。
初めましての方がほとんどかと思いますので、少し自分の話をしたいと思います。

僕は今、SEを職業としています。しかし、情報系の学校などは出ておらず、20代はITとは無縁の仕事をしていました。しかし、色々あって30歳でSEという職業にたどり着きました。

SEを選んだ理由は単純で、「ものを作る」仕事がしたかったからです。それに、「プログラミングって何かかっこいい!!」っていう憧れもありました。
が、いざ蓋をあけてみるとプログラムを書くどころか、プログラムを見ることもできない環境でずっとExcelを触る日々。。テストをやったり、ドキュメントを作る毎日でした。30歳で未経験であれば、当然なのですが。。

 

そこで、「仕事でプログラマを書けないんだったら、自分で書こう。どうせなら楽しい方がいいから、ゲームを作ろう!!」という考えに至った今日であります。

 

そして、まず着手したのがJavaで作ったシューティングゲーム。以下の本の通りにまずやってみました。

15歳からはじめるJAVAわくわくゲームプログラミング教室 フルカラー最新版【Windows & Mac両対応】

15歳からはじめるJAVAわくわくゲームプログラミング教室 フルカラー最新版【Windows & Mac両対応】

 

 何故Javaなのかというと、今の会社の研修でJavaを習ったからという単純な理由です。
この本の通りにすると、いわゆるシューティングゲームができるのですが、自分にとってはすごい難しい。。この本で得た知識で、いざ自分のオリジナルゲームを作ろうと思うと、かなりの時間と労力を使うのは目に見えてるし、飽きっぽい自分には無理だなと感じました。
ただ、自分が書いたプログラムが、ゲームとして動いてくれるのはやっぱり嬉しいです。素直に、楽しい!!って思えましたね。

次に考えたのが、ゲームエンジンのUnityを使っての開発です。言語はC#で触ったことは無いんですが、後々の役に立つし、これを機にUnityと一緒に勉強していこうと思います。
ただ、闇雲に作っていってもモチベーションを保つのが難しいのでiOSアプリとしてリリースすることを当初の目標にします。そこまで作りこまずに、まず「リリース」することを第1目標とします。

本ブログでは、自分の備忘録をかねて日々の開発状況を記録していきます。
果たして、30歳からゲーム作りを始めて、本当にリリースできるのか?

自分でも結果が楽しみです。

 

【Java】文字と文字列の変換に関するメモ

Stringからcharの配列に変換

String str = "abc";
char[] array = str.toCharArray();


StringBuilderからcharの配列に変換

StringBuilder sb = new StringBuilder("abc");
char[] array = new char[sb.length()];
sb.getChars(0, array.length, array, 0);


charの配列からStringオブジェクトを生成

char[] array = {'a','b','c'};
String str = new String(array);


charの配列からStringBuilderを生成

char[] array = {'a','b','c'};
StringBuilder sb = new StringBuilder();
sb.append(array);

【Java】数値型から文字列型へ、文字列型から数値型への変換方法メモ

// 数値型から文字列型への変換
String str = Integer.toString(100);

// 文字列型から数値型への変換
int i = Integer.parseInt(str);

【Java】文字列比較についてのメモ

同一の文字列オブジェクトを参照しているため、==演算子で比較するとtrue

String str1 = "abc";
String str2 = str1;
if(str1 == str2) {
    System.out.println("成立");  // 出力される
}


異なる文字列オブジェクトのため、==演算子で比較するとfalse

String str1 = "abc";
String str2 = new StringBuilder("abc").toString();
if(str1 == str2) {
    System.out.println("不成立");  // 出力されない
} else if (str1.equals(str2)) {
    System.out.println("成立");    // 出力される
}


文字列から暗黙に生成されるStringオブジェクトは、文字列の内容が一致すれば同一のStringオブジェクト

String str1 = "abc";
String str2 = "abc";
if(str1 == str2) {
    System.out.println("成立");  // 出力される
}


文字列の内容を比較する場合は、常にequalsメソッドを使用

String str1 = "abc";
String str2 = new StringBuilder("abc").toString();
if(str1.equals(str2)) {
    System.out.println("成立");  // 出力される
}


StringBuilderオブジェクトを比較する場合は、contentEqualsメソッドを使用

StringBuilder sb1 = new StringBuilder("abc");
StringBuilder sb2 = new StringBuilder("abc");
if(sb1 == sb2) {
    System.out.println("不成立");    // 出力されない
} else if(sb1.equals(sb2)) {
    System.out.println("不成立");    // 出力されない
} else if(sb1.toString().contentEquals(sb2)) {
    System.out.println("成立");      // 出力される
}

【Java】文字列結合についてのメモ

演算子「+=」を使った文字列結合の場合、暗黙的にStringBuilderオブジェクトを生成している。
そのため、ループ処理を使った文字列結合の場合は、StringBuilderオブジェクトの生成を最小限にすべき。

String[] array = {"abc", "def", "ghi"};
StringBuilder sb = new StringBuilder();
for (String str : array) {
    sb.append(str);
}
System.out.println(sb);  // abcdefghiと出力される

【Java】StringBuilderクラスでよく使うメソッドメモ

変更可能文字列クラスのStringBuilderクラスのメモ。


append:指定した文字列を追加

StringBuilder sb = new StringBuilder("abc");
System.out.println(sb.append("def"));   // abcdefと出力される


delete:部分文字列を削除

StringBuilder sb = new StringBuilder("abcdef");
System.out.println(sb.delete(1, 3));   // adefと出力される


indexOf:文字列から、指定した文字を検索

StringBuilder sb = new StringBuilder("abcdef");
System.out.println(sb.indexOf("c"));   // 2と出力される


insert:文字列を指定位置に挿入

StringBuilder sb = new StringBuilder("abcdef");
System.out.println(sb.insert(3, "abc"));     // abcabcdefと出力される


replace:文字列を置換

StringBuilder sb = new StringBuilder("abcdef");
System.out.println(sb.replace(3, 5, "abc"));    // abcabcfと出力される


setCharAt:指定位置に文字をセット

StringBuilder sb = new StringBuilder("abcdef");
sb.setCharAt(3, 'c');
System.out.println(sb);   // abccefと出力される


substring:部分文字列を取得

StringBuilder sb = new StringBuilder("abcdef");
System.out.println(sb.substring(3, 5));  // deと出力される


StringオブジェクトからStringBuilderオブジェクトに変換

String str = "abc";
StringBuilder sb = new StringBuilder(str);


StringBuilderオブジェクトからStringオブジェクトに変換

StringBuilder sb = new StringBuilder("abc");
String str = sb.toString();