7
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

初心者向けC#の構造とルールの説明

下のスクリプトはUnityのデフォルトのスクリプトです

Sample.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sample : MonoBehaviour 
{

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }
}

C#スクリプトはいくつかエリアに分かれているので、まずはそのエリアについて解説します

①C#の機能やUnityの機能を使うと決めている部分

using System.Collections; → C#の機能を使う
using System.Collections.Generic; → 追加のC#の機能を使う
using UnityEngine; → Unityの機能を使う

ここは基本的にはいじりません。
Unityの機能を追加する場合(例えば文字の表示や、体力ゲージなど)、追加する時もあります。

②スクリプトの名前を決めている部分

public class Sample : MonoBehaviour → スクリプトの名前はSampleに指定しています

ここで指定しているスクリプトの名前とC#を作成した時につけた名前が違うとバグります
MonoBehaviourというのはオブジェクトに貼り付けるタイプのスクリプトという意味です

③使う変数の名前を入力する部分

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sample : MonoBehaviour 
{

 **ここに変数をいれる**

// Use this for initialization
    void Start () {
    }

例えばGetabakoという変数を作ってみると

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sample : MonoBehaviour 
{

 public int Getabako;

// Use this for initialization
    void Start () {
    }

となります
例ではグローバル変数をint型(整数)でGetabakoという変数を作っています
因みに一つの命令をする度に文末には「;」をつけます

変数の型や演算子についてはこちらがよくまとめてくれているので参考にしてみて下さい♪

④ゲームが開始した時に一度だけ実行する部分

// Use this for initialization
    void Start () {
   **ここに一度だけ実行する命令をいれる**
    }

ここにはゲーム開始時に一度だけ実行する命令をいれます(厳密に言うとホントは違うんですが…)
開始直後に一度だけ起こるイベントや、変数の値の設定、
コンポーネント(Unityで簡単に使える機能の一まとめ、重力や当たり判定)の取得

⑤ゲーム開始中毎フレーム実行する部分

// Update is called once per frame
    void Update () {
   **ここに毎フレーム実行する命令をいれる**
    }
}

ここにはゲーム開始中毎フレーム実行する命令をいれます
ほとんどの命令はここにいれていきます

⑥コルーチン、衝突判定などを入れる部分

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sample : MonoBehaviour 
{

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }
**ここにコルーチン、衝突判定などをいれます**
}

コルーチンは一連の命令を一塊にまとめたもので命令の中で待ち時間を入れたい時にも使います
当たり判定が衝突した時の処理もここにいれます

実際に全てを入れてみると以下のようになります

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sample : MonoBehaviour 
{

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

IEnumerator Getabako() → Getabakoというコルーチンを定義している
    {
        yield return new WaitForSeconds(0.5f); → 0.5秒待つ
     Debug.Log(”ゲタバコ先生は最高!!”); → ゲタバコ先生は最高!!とログを出す
}

void OnTriggerEnter(Collider collision) → 当たり判定が衝突したときの命令を記述している
    {
        if (collision.gameObject.tag == "getabako") → もし衝突した当たり判定のタグがgetabakoなら
        {
            StartCoroutine("Getabako"); → Getabakoコルーチンを開始する
        }
    }
}

コルーチン

IEnumerator コルーチンの名前()で始めて{}ではさみます。
コルーチンの中にいれる待ち時間は
yield return new WaitForSeconds(秒数);と記述します。
この命令はコルーチンの中でしか使えません。

衝突判定

void OnTriggerEnter(Collider 変数の名前)で始めて{}ではさみます。

例ではGetabakoというコルーチンを作っていてその内容は0.5秒待ってから
ゲタバコ先生は最高!!とログを出すという一連の流れを設定しています
そしてそのGetabakoコルーチンはgetabakoというタグがついた物に衝突した時に開始されます
コルーチンや、衝突判定についてはこの後実際にスクリプトを作成していく段階でも触れますので、
今は何となくの理解で大丈夫です。

C#の基本まとめ

A, 構造とルールを覚える

構造は以下の図の通りになっていて、②④⑤⑥はそれぞれ { } ではさみます。
また、各命令は文末には必ず ; をつけます。
スクリプトはこのようにエリアに分かれているので、適切な命令を適切なエリアに入力していきます。
//を文頭につけるとそれは全てコメントになり、スクリプトには無関係なものとなります。
人にスクリプトが何をしているのか伝えるときには、このコメントを使うことで、
それぞれの命令が何をしているのかをわかりやすくします。

stage.png

B, 変数の使い方やif文、コルーチン、衝突判定などよく使う命令の使い方を覚える

変数、if、コルーチン、衝突判定を使いこなせれば基本的なゲームの作用は格段に作りやすくなります。
まずはこれらの基本の型をしっかり頭に叩き込みましょう。

C, マイナーな命令の使い方を覚える

もちろん、これだけでは足りず、C#には覚えないといけないことは沢山あります。

ただそこは経験を積んでいきながら覚えていくとして一旦はチュートリアルに戻りましょう♪

ゲタバコ先生のホームページ遊びに来てね♪

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
7
Help us understand the problem. What are the problem?