ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

20220329162023

Unity入門 - C#スクリプトの文法①コメントと型、変数、関数 -

初めに

 コメントの書き方と型と変数、関数の定義の仕方をまとめました。これを見れば, 初心者でもある程度C#スクリプトが書けるようになります。

C#スクリプトの構造について

 C#スクリプトは次の3つの構造に分けられます。


f:id:fineworks_fine:20220205171811p:plain:w400

  • class(クラス)
  • method(メソッド, 関数)

 前回の記事で解説しておりますので、そちらをご覧ください。
fineworks-fine.hatenablog.com

スクリプト全体で共通のもの

コメント
// 1文の場合

/*
  複数行のコメントの場合. 
  この間に打てばコメントとして扱われる.
*/

 プログラミングをする際、後からソースコードを見て、すぐに処理がわかるようにすることは非常に大切です。その際、スクリプト内にプログラムの処理に関係しない文章やメモを残すためにコメントを使います。

名前空間での文法

 名前空間を自分で定義して, 使うこともできますが, 初めのうちはデフォルトで定義されている名前空間を使うとよいと思われます。そのため, その方法だけ記述します。

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

 using (名前空間の名前); でその名前空間に定義されているものが使えるようになります。この機能をusingディレクティブといいます。
 名前空間で定義せずにスクリプトで使うと "The type or namespace name '(型か名前空間の名前)' could not be found" とエラーを吐きます。"型もしくは名前空間が見つからないです" ということですね。注意しましょう。
 System.Collections、System.Collections.Generic、UnityEngineはC#スクリプトを作った際に、自動で書かれています。それ以外で使いたいものは適宜、自分で書き足しましょう。よく使うものは、UnityEngine.UIです。TextやImageなどUnityのUIと呼ばれるものを扱う際に使います。名前空間がないぞとエラーが出たら、名前空間に記入漏れがあることを疑いましょう。

クラス内の文法

アクセス修飾子
 public  //外部からアクセスできる
 private   //外部からアクセスできない

 外部からそのクラスや関数、変数が使用できるか否かを決めます。ほかにもprotectedなどのアクセス修飾子があります。定義の際に省略される場合がありますが、そのときはprivateになります。

型と変数

〇値型

int intNum  = 1;  //intは整数
float floatNum = 0.1234;  //floatは小数
public bool boolValue = true;  //boolは真偽. trueかfalseか
private char c = 'a';  //charは文字. 文字は' 'で囲む

 型 (型の名前) で定義します。上記のように定義と同時に代入することもできます。アクセス修飾子を付ける際は、先頭に付けます。アクセス修飾子は省略すると、privateになるので、boolValue以外の変数はprivateになります。
 また、一つの変数には一つのデータしか入れることができないことに注意しましょう。

int intNum  = 1;  //intNumという整数を定義. いまは1が入っている.
char c = 'a';  //cという文字を定義. 今は'a'が入っている.

intNum = 2;  //intNumに2を代入. いままで入っていた 1 はなくなる.
c = 'b';  //cに'b'を代入. いままで入っていた 'a' はなくなる.

Debug.Log(intNum);  //コンソールに2が表示される
Debug.Log(c);  //コンソールにbが表示される

 一つのデータではなく、複数のデータを一気に定義したい場合もあります。特に、charは一文字しか入れることしかできないため、文を扱いたい場合はcharを使えません。そこで、次の参照型と呼ばれる型を定義します。

〇参照型

String str = "mojiretsu";  //Stringは文字列. " "で囲む
int[] array;  //配列. 型名 [] 変数名で定義.

array = new int[3]  //配列の初期化. 変数 = new 型名[配列の長さ]
array[0] = 4;  //array[0]に4を代入. 配列のスタートは0から. 
array[1] = 5;  //配列の長さを3にしたので, array[0], array[1], array[2]の3つが存在する.
array[2] = 6;

int array2 = new int[] { 0, 5, 10 }  //定義と同時に初期化もできる

 文字列は、値型と同じように扱えます。
 配列は、上記のように定義、初期化できます。今回は int で定義していますが、他の値型の配列も定義できます。配列は複数の変数を代入できる多次元配列も定義できます。詳しいことは、また記事にすると思います。

関数
void Start(){
  //デフォルトで記入されている
  //最初に一回だけ呼び出される
}

void Update(){
  //デフォルトで記入されている
  //1フレームに一回呼び出される
}

//自分で関数を定義する場合
//アクセス修飾子 戻り値の型 関数名(引数の型 引数名)で定義する
public void Attack(){  //戻り値がない場合, voidを記入, 引数がない場合はかっこの中は無記入
  //自分で処理を記入
}

public bool IsDead()
{
  bool _isdead = true;  //isdeadにtrueを代入
  return _isdead;  //isdeadを戻り値とした. 今回はtrueが戻り値となる.
}

private int AddNum(int a, int b)
{
  int c = a + b;
  return c;
}

 関数は上記のように定義します。関数を呼び出す際、呼び出し元から変数を持ってきたい場合は引数を追加します。また、関数内で処理した結果を呼び出し元に返したい場合は戻り値をvoidではなく変数の型にしておきます。戻り値がある場合は関数の中に "return (戻り値)" を書いておきましょう。
 

最後に

 条件分岐の仕方や演算処理の仕方は、別でまとめようと思います。型や変数、関数の定義の仕方を忘れたら見に来ていただけると嬉しいです。