cover

Unityゲーム開発で初学者が特に知っておくべきこと

author icon Muko

初めに

 こんにちは。令和6年度のCACTUS会長です。 この記事では、断片的にでも良いので知っておくべき情報をお伝えします。 定義やなぜそうなるかについてはUnity、C#の公式リファレンスやQiitaをご参照ください。 随時更新していきます。 備忘録としてもご活用ください。

用語について

 Unityを扱う際、基本的な専門的な用語はなんの説明もなく使われることがあります。 ここで覚えてしまいましょう!

シーン

 ゲームが動く1つのまとまりです。ゲーム制作ではこのシーンを複数作って場面を切り替えることが多いです。 重要なこととして、こちら側で設定をしないとシーンをまたいでオブジェクトやその情報を引き継ぐことはできません。

ヒエラルキー

 初期設定でUnityの左側にあるやつです。オブジェクトが一覧表示されて、ここからオブジェクトを選択できます。

インスペクター

 初期設定で右側にあるやつです。ここでオブジェクトの詳細設定が行えます。

プロジェクトウィンドウ

 初期設定でUnityの下側にあるやつです。ファイルに関する操作はここで行います。

Prefab

 機能を持ったオブジェクトを1つのパーツとしたまとまりです。とてもよく使います。 ヒエラルキーのオブジェクトをドラッグしてプロジェクトウィンドウに持っていくことで簡単に作成できます。

コンポーネント

 オブジェクトに機能を持たせるパーツのことです。主に当たり判定の作成で重宝します。ゲーム制作ではオブジェクトにコンポーネントとプログラムファイルをつけることで機能を作っていきます。

アセット

Unityでは基本ゲームの素材等はAssetsファイルに入れて管理します。プロジェクトウィンドウに存在します。

UI

ユーザーインターフェースの略で、プレイヤーがオブジェクトに干渉するものすべてをまとめてこういいます。UnityのUIは充実しているので、是非いろいろ使ってみてください!

Rigidbody

 Unityでは標準のコンポーネントとしてオブジェクトに重力を働かせる「Rigidbody」というものがあります。 かなりよく使うので覚えておきましょう。いろんなサイトで説明なく使われます。また、よく「rb」という変数にして使われます。 さらに、2Dだと「Rigidbody2D」となります。混乱のもとになるため、注意しましょう。

Collision  オブジェクトにつけることができる当たり判定です。様々な種類があるので、その都度適切なものを選びましょう。 また、Rigidbodyと同じように2D版では後ろに「2D」がつきます。注意してください。

エラー関係について

 Unityでの開発をしていると、ほぼ確実に想定通りの挙動をしてくれないことがあります。これは主に次の2種類で分けられます。

コンパイルエラー

 エディタがそもそも実行できない構造を作ったときに起きるものです。赤いエラー文が表示されます。

 この場合、エラー時に出るC○○~という番号を調べるか、エラー文をコピペして調べましょう。 基本的に先人がいるので、解決できるはずです。 万が一前人未踏のエラーに遭遇した場合は、エディタの場合はUnityに、プログラミングの場合はMicrosoftの公式リファレンスをご参照ください。

また、中には再起動するとなおるものもあります。

警告文

 現在のコンパイルの実行については問題ないが、値が格納されているべきところにnull値が格納されていたり、そのほか何かしらのおかしな挙動が確認されたときに起きるものです。 黄色いエラー文が表示されます。  対処法自体はコンパイルエラーと同じです。余裕があるなら直しましょう。

プログラミングについて

 UnityでのC#プログラミングでよく使う機能を列挙します。

コメントアウト

 プログラム内に機械がスルーする文を書けます。 構文こそ違いますが、ほぼすべてのプログラミングで使います。 C#だと以下のように書きます。

//こんなふうに、行の最初にスラッシュを2つ付けるとその行がコメントに。
/*こんなふうにアスタリスクとスラッシュで囲うと、その囲った範囲がコメントに。*/
using文

 すでに実装されている機能を使用したいときに使います。多分一番エラーが出る要因だと思います。 ex.)

//using文はファイルの最初に記述
using UnityEngine; //Unityの標準機能を使う
using UnityEngine.InputSystem;//Unityの「InputSytemという機能を使う。」

より詳細を知りたい方は、「C# 名前空間」でググってください。

Start()とUpdate()

 新規ファイルに最初から存在するUnity標準の関数です。UnityEngineのUsingが必要です。 Start()がプログラムファイルがついているオブジェクトがシーンに現れたときに最初だけ実行される関数 で、Update()がプログラムファイルがついているオブジェクトがシーンに存在するときに常に実行される関数 です。

ex.)

void Start()
{
//ここに最初だけ実行したい処理
}
void Update()
{
//ここに常に実行したい処理
}

 とてもよく使うので、覚えておきましょう。 なお、これらの関数に限らず、プログラミングでは大文字と小文字を区別します。注意してください。

classとファイル名

 c#にはclassという機能があります。classについて真面目にやろうとするととんでもないことになるので、とりあえず1つのまとまりだと覚えておいてもらえば大丈夫です。 重要なのは、ファイル名とclassを同じにするということです。 Unityでプログラムファイルを作る際、何もしなければ自動的にファイル名とclass名を同じにしてくれます。 ファイル名とclass名が異なると混乱の元となるので、いたずらにclass名を変えないようにしましょう。

アクセス修飾子

 変数や関数はどこからでもアクセス出来たらまずいので、C#にはアクセス修飾子というものが存在します。 基本的なアクセス修飾子は、privatepublicの2つです。 超簡単に言うと、privateは外部からアクセスできない(例外あり)ようにするもので、publicは外部からのアクセスをできるようにするものです。 本来、特別な理由がなければpublic変数はあまり使うべきではないのですが、public変数と関数はとても簡単に利用できるため、**変数名、関数名が被らない限りは、**publicにしてもよいと思います。 publicにすると、以下のようにアクセスをすることができます。なお、classはpublicでも問題ありません。

public class Player : MonoBehaviour
{
public float health = 10;
}
//ここから別ファイル
public class Enemy : MonoBehavior
{
void EnemyAttack()
{
Player.health--;
}
}

なお、アクセス修飾子を何も書かないとprivate判定になります。

InputSystemについて

 新しく登場したUnity6の標準機能として、InputSystem という超便利な入力検知ツールが実装されました。 InputSystemについては、とてもわかりやすく解説している方がいらっしゃるので、以下からご視聴ください!

InputSystem解説

困ったときは

 いきなり周りを頼らず、一度自分で調べてみましょう。 それでもわからない場合だけ周りを頼るようにしてください。こうすることで、次第とゲーム制作に慣れてきます!

AI利用について

 昨今、ChatGPTをはじめとした生成系AIが登場してきています。ゲーム制作にあたってこういったAIを利用することは決して悪いことではありませんが、以下の点に注意しましょう。

1. 著作権のあるコンテンツをなげないこと

 ゲーム制作に限らず、やってはいけません。気を付けましょう。

2. 自分で確認すること

 問題点をAIに相談すると、大体の場合解決策が返ってきますが、誤情報を当たり前のように出してきたり、Unityの現バージョンでは対応してないことがよくあります。個人的には、AIに解決策を聞き、その方法の名前を自分で調べることをおすすめします。

3. 脳死で投げないこと

 ゲーム制作がうまくいかない結果、イライラしてAIに適当な文で問題を投げたくなることはたまにあると思います。ですがその結果、AIが自分が想定していたものとは別のものを返してくることになってしまいやすいので、指示文は冷静にかつ詳細に書きましょう。

投稿日:2025/05/22 修正第1回:2025/05/24