「C#の変数って、intとfloatの違いがよく分からない…」
Unityでスクリプトを書き始めると、型の名前に最初は戸惑う方が多いです。
変数は、HPや速度、プレイヤー名など、ゲーム内のデータを入れておく箱だと考えてください。
型を間違えるとエラーになったり、Inspectorでの表示が意図と違ったりします。
この記事では、Unityでよく使う4つの型と、public・SerializeFieldによるInspector連携、命名のコツまでを具体例で説明します。
C#の基礎記事の次に読む想定で書いています。
- intとfloatの使い分けが分からず、数値の書き方でエラーになる
- publicを付けたのにInspectorに表示されない、または付けたくないのに表示されてしまう
- 変数名の付け方がバラバラで、コードが読みにくくなっている
✨ この記事でわかること
- int・float・string・boolの使い分け
- publicとprivateの違い
- SerializeFieldでInspectorに表示する方法
- HPや速度変数の具体例
- 変数の初期化と命名のコツ
- 初心者でも理解できる解説
\プログラミング未経験でも大丈夫!まずは1本作り切ろう/
初心者が最初に選ぶならコレ
Unity ノンフィールドRPG
+スレスパ風JRPG講座
Unity6対応・スマホ化対応の最新カリキュラム。「何から始めればいいかわからない」という初心者でも、ステップごとに手を動かすだけでRPGが完成します。
憧れのアクションゲームに挑戦
Unity 2Dアクションゲーム
の作り方講座(ロックマン風)
初心者でもロックマン風の横スクロールACTが作れる講座。7ステージ+ラスボスという本格構成で、スマホ化・広告実装まで対応。「自分のゲームをリリースしたい」夢を叶えます。
3Dゲーム開発の入口はここ
ゼルダ風3Dアクションゲーム
の作り方講座
「3Dゲームって難しそう…」と感じている初心者向けの講座。全16回でゼルダ風3Dアクションがスマホ対応で作れるようになります。3D開発の基礎がしっかり身につきます。
変数とは何か
変数は、プログラムの中で値を保存しておく場所です。
Unityでは、プレイヤーのHP、移動速度、敵の名前など、ゲームの状態を変数に入れて管理します。
変数を使う理由は3つあります。
- 同じ値を何度も使うとき、1か所で管理できる
- Inspectorから数値を変えて、コードを書き換えずに調整できる
- 処理の途中で値が変わる(HPが減るなど)ことを記録できる
変数を宣言するときは、型(どんなデータを入れるか)と名前を指定します。
int hp = 100; float moveSpeed = 5.0f; string playerName = "Hero"; bool isAlive = true;
Unityでよく使う4つの型
最初に覚える型は、次の4つで十分です。
ゲーム制作の大半はこの中で完結します。
| 型 | 入れられるデータ | Unityでの使用例 |
|---|---|---|
| int | 整数(小数なし) | HP、スコア、残りライフ、弾の数 |
| float | 小数ありの数値 | 移動速度、ジャンプ力、タイマー、距離 |
| string | 文字列(テキスト) | プレイヤー名、ダイアログ、ステージ名 |
| bool | trueかfalseの2値 | 生存フラグ、ジャンプ中か、扉が開いているか |
floatの値には末尾にfを付けます(例:5.0f)。
付け忘れるとコンパイルエラーになることがあります。
int同士の割り算は小数が切り捨てられる点にも注意しましょう。
HPと速度の具体例
実際のゲームでよく使う変数の例を見てみましょう。
using UnityEngine;
public class PlayerStatus : MonoBehaviour
{
public int maxHp = 100;
public int currentHp = 100;
public float moveSpeed = 5f;
public string playerName = "Knight";
public bool isInvincible = false;
void Start
{
currentHp = maxHp;
Debug.Log(playerName + " HP:" + currentHp);
}
public void TakeDamage(int damage)
{
if (isInvincible) return;
currentHp -= damage;
if (currentHp <= 0)
{
currentHp = 0;
Debug.Log("ゲームオーバー");
}
}
}
maxHpとcurrentHpを分けておくと、回復上限やUI表示の計算がしやすくなります。
moveSpeedはInspectorで調整し、手触りを確かめながら最適値を探せます。

速度は3f、5f、8fとInspectorで変えてPlayするのが近道です。
数字の意味が分からなくても、「速くなった・遅くなった」を体感できると理解が進みますよ。
publicとprivateの違い
変数の前に付けるpublicやprivateは、他のスクリプトやInspectorから見えるかどうかを決めます。
| 修飾子 | Inspector表示 | 使いどころ |
|---|---|---|
| public | 表示される | Inspectorで調整したい数値、他スクリプトから触る値 |
| private | 通常は非表示 | 内部だけで使う一時的な値、外から触ってほしくない値 |
すべてpublicにすると、Inspectorがごちゃごちゃして編集ミスが増えます。
外から触る必要がない変数はprivateにする習慣をつけましょう。
何も書かない場合、クラス内の変数はprivate扱いです。
SerializeFieldでprivateのままInspectorに表示
「privateにしたいが、Inspectorでは調整したい」という場面では、[SerializeField]が便利です。
using UnityEngine;
public class EnemyMove : MonoBehaviour
{
[SerializeField] private float moveSpeed = 3f;
[SerializeField] private int attackPower = 10;
void Update
{
transform.Translate(Vector3.left * moveSpeed * Time.deltaTime);
}
}
SerializeFieldを付けると、privateのままでもInspectorに欄が表示されます。
他のスクリプトからは直接触れないので、カプセル化(データの保護)と調整のしやすさを両立できます。
Unity 2020以降では、[SerializeField]の代わりにフィールドの右クリックから「Reset」などが使える場合もありますが、明示的にSerializeFieldを書く方が意図が伝わりやすいです。
変数の初期化とスコープ
変数は宣言時に初期値を入れておくと、Play開始直後から意図した状態になります。
currentHp = 0のまま始まる、といったバグを防げます。
スコープとは、変数が使える範囲のことです。
クラスの先頭で宣言した変数は、そのクラス内のどの関数からも使えます。
関数の中だけで宣言した変数は、その関数の中だけで有効です。
public class ScoreManager : MonoBehaviour
{
private int score = 0;
void AddScore(int points)
{
score += points;
Debug.Log("スコア:" + score);
}
}
scoreはクラス全体で共有されるので、AddScoreを何度呼んでも累計が保持されます。

変数名は hp より currentHp、 speed より moveSpeed のように「何の値か」が分かる名前がおすすめです。
1週間後の自分が読み返すことを想像して付けましょう。
命名のコツとよくあるミス
変数名は、英数字とアンダースコアで付けます。
日本語は使えません。
Unityでは、次のルールが一般的です。
- 先頭は小文字、単語の区切りは大文字(moveSpeed、maxHp)※キャメルケース
- boolは is や has で始める(isAlive、hasKey)
- 意味のない a、temp1 より、用途が分かる名前を選ぶ
よくあるミスも確認しておきましょう。
- floatに整数だけ書いて f を付け忘れる(5 → 5f)
- stringを + で数値と連結するとき、意図しない変換が起きる
- publicにしすぎてInspectorが見づらくなる
- 初期化忘れで0や空文字のままPlayが始まる

変数が理解できたら、次は関数で「TakeDamage」や「Move」の処理を分けていきましょう。
Updateがスッキリして、コードが読みやすくなりますよ。
記事を読んで「作ってみたい!」と思ったら!初心者でも1本完成できる講座で実力をつけよう
知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを1本完成させることで、理解が一気に深まります。プログラミング未経験からでも取り組める講座で、ゲーム開発の第一歩を踏み出しましょう。
Unity ノンフィールドRPG+スレスパ風JRPG講座【Unity6対応!初心者でもデッキ構築×JRPGをスマホ向けに作れる!】

- Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
- Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
- 初心者でも迷わず進められる丁寧な解説構成
- ノンフィールドRPGとデッキ構築JRPGの2つをまとめて学べるセット講座
Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、プログラミング未経験の初心者でも取り組みやすい、ステップバイステップ形式の講座です。
Unity6対応・スマホ化対応の最新カリキュラムで、読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。
「何から始めればいいかわからない…」という初心者が最初に選ぶ一本として最適な講座です。
Unity6対応・スマホ化対応の最新カリキュラム
ゼロからでもRPGを完成させよう
→ スレスパ風デッキ構築JRPG講座を見てみる
初心者でもスマホ対応のRPGが作れる!まずは1本完成を目指そう!
Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!初心者でもスマホ化・広告実装まで対応した本格横スクロールACTが作れる!】

- ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
- 7ステージ+ラスボスステージの本格的なゲーム設計を初心者でも実現
- スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
- 敵AI15体・多彩なマップギミック・武器システムを完全実装
- 完全オリジナルゲームをアセット不使用で素材提供付きで制作
Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを、初心者でもゼロから開発できるようになる講座です。
全16回で当たり判定・物理挙動・敵AIの知識を実際のゲームコードとして実装する体験が詰め込まれています。スマホ化・広告実装まで対応しているため、「作って終わり」ではなくリリースまで見据えた実践スキルが身につきます。
「憧れのアクションゲームを自分の手で作ってみたい」という初心者に強くおすすめの一本です。
スマホ化・広告実装まで対応した本格横スクロールACT
初心者でもロックマン風2Dアクションをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
初心者でも本格ACTが完成する!広告収益まで視野に入れた実践スキルを手に入れよう!
ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

- ゼルダの伝説・モンハン・原神のような3Dアクションをゼロから開発
- 「3Dは難しそう」と感じている初心者でも取り組みやすい丁寧な解説構成
- スマホ化対応で実機で動かせるゲームが完成
- アセットを使った実践的なゲーム開発手法が身につく
- 画像・動画・全ソースコード公開の充実したサポート
ゼルダ風3Dアクションゲームの作り方講座は、「3Dゲームは難しそう…」と感じている初心者こそおすすめの入門講座です。
全16回の丁寧な解説で、ゼルダの伝説・モンハン・原神のような本格的な3Dアクションゲームを確実に完成まで導きます。スマホ化対応で実機で動かせるため、初めて3Dゲームを作り上げた達成感がひときわ大きい講座です。
「3Dゲームを自分でも作れるか試してみたい」という初心者の最初の一歩として最適です。
初心者でも3Dアクションがスマホ対応で完成する
ゼルダ風3Dアクションゲームで3D開発の壁を一気に突破しよう
→ ゼルダ風3Dアクションゲームの作り方講座を見てみる
全16回でスマホで動くオリジナル3Dゲームを完成させよう!
まとめ
UnityのC#変数は、int・float・string・boolの4型から始めれば十分です。
HPや速度のように、ゲームのデータを変数に入れて管理します。
publicはInspector表示、privateは内部用、SerializeFieldならprivateのまま調整可能、と使い分けましょう。
初期値を設定し、意味のある名前を付けることで、後からの修正が楽になります。
Inspectorで数値を変えながらPlayする習慣も、理解を深める近道です。
変数の次は関数で処理を分ける学習に進みましょう。
体系的に追いかけたい方は、Unity入門の森の講座も参考になります。
スクリプトの基礎からゲーム完成まで、実践的な流れで学べる内容が揃っています。
今日はmoveSpeedをInspectorでいじるところから、試してみてください。



コメント