室村日記

日々、試行錯誤したことを備忘録的にまとめていきます

プログラミング初心者がUnityチュートリアルで苦しんだポイント

1 はじめに

プログラミング初心者がUnityのチュートリアルに挑戦してつまづいた部分をメモしていきます.
(逐次更新する予定です)

「初心者ゆうてもピンキリやがな」という話ですが,私がどのくらい初心者かというと,for文やif文くらいは自信を持ってわかると言えるレベルです.
クラス?宣言?オブジェクト指向
なんとなく説明できないこともないこともないこともないよ!ってなものです.

さて.
現在のUnityのバージョン(5.6.1)に対してチュートリアルで使われているバージョンが若干古く,UIなどの仕様変更が多々あっていちいちつまづきました.
プログラミングを勉強し始めてから,
あっこれ死にゲーってやつだ
と割と早く悟ることができたのですが,盲点なのは自分の記憶力が恐ろしく悪かったことです.
いつまでも序盤の罠でしに続けているわけにはいかないので,主に自分の為にそれらをメモしていこうと思います.

実際に作ったものや感想についてはまた別の記事で.


2 つまづいた部分

2.1 Assetについて

Asset Tabを開き,導入したいassetを検索してインポートします.
今回はspace shooterで検索するとチュートリアル用の一式を手に入れることができます.
Asset storeのタブは,ショートカット⌘9か,Window > Asset Storeで開くことができます.


2.2 Unity Web PlayerとWebGL

チュートリアルの動画ではWeb Playerが紹介されていますが,現在のUnityでは非推奨としており,どうもそのうち使えなくなるようです.
そこで代わりにWebGLを使用することにしました.
作業環境や対象とする環境は,⌘+Shift+Bでビルトの設定画面を開き,そこで設定することができます.


2.3 Gameウィンドウの設定

ビルトの設定画面で左下のplayer settingsをクリックすると,Inspectorタブで設定ができるようになります.
ここではResolution and Presantationのところでサイズを変更し,そのあとGameタブの左上のFree Aspectとなっているところをクリックして+を選択し,新しく600×900に設定し直しました.


2.4 スクリプトエディターについて

Unityをインストールすると勝手についてくるMonoDevelopを使えばとりあえずスクリプトは書けます.
サジェスト機能など,使い心地などがちょっとアレな場合はVisual Studioなどを使うこともできます.
www.visualstudio.com


2.5 RIgidbodyの取得

Unity公式のチュートリアル動画では

rigidbody.velocity = movement

のように,rigidbodyのvelocityメソッドに直接movementの情報を与えられると書いていますが,これはUnity4のための書き方であって,現在のUnity5ではエラーとなってしまいます.
Unity5では,まずvoid FixedUpdate()の前にvoid Start()を宣言し,その中でGetComponent()を使ってrigidbodyを取得してやる必要があるようです.

つまりスクリプト

void Start()
{
	rb = GetComponent<Rigidbody> ();
}

void FixedUpdate()
{
	float moveHorizontal = Input.GetAxis ("Horizontal");
	float moveVertical = Input.GetAxis ("Vertical");

	Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);
	rb.velocity = movement;
}

と書き換えれば大丈夫です.


2.6 Mathf

チュートリアルの中で,公式にリファレンスがあるので逐一チェックすると良いよと言われました.
試しにMathfで検索してみたら公式の(しかも日本語の!)リファレンスがヒットしました.
docs.unity3d.com
これによるとMathfはUnityEngineの中に入っている,標準的な数学関数を扱うためのモジュールのようです.


2.7 public float speedなど

public class PlayerController : MonoBehaviour
{
	public float speed;
	public float xMin, xMax, zMin, zMax;
}

のようにクラスの先頭で[public+型+変数名]で宣言した変数は,UnityのInspectorで後から与えることができます.
こんな感じに新しい入力窓が勝手にできます.
f:id:muromura:20170612194751p:plain


また詳しいことはわかりませんが,class宣言時に[System.Serializable]を使うと,以下のように折り畳んだ形で変数を与えられるようです.
f:id:muromura:20170612195538p:plain





3 まとめ

そもそもCとC++C#の違いすらわかっていない人間なので,コードの意味もなんとなくしか追えず,ひたすら辛い時間が続いています.
しかしその辛さを乗り越えて余りあるのが,ゲームを作る楽しさです.

とりあえずチュートリアルの範疇では面倒なキャラクターの3Dモデリングやテクスチャー作成をする必要がないのも,素晴らしい点です.
システムとしてはそんな複雑なことをやっていなくても,とりあえずモデリングとテクスチャーがしっかりしていたら見れるものになりますもんね.

それでは.




4 この記事を書くにあたって参考にさせていただいた記事

tech-camp.in
idol-ch.net
docs.unity3d.com
brian.hatenablog.jp
curious-boys.hatenablog.com