未来を創る、テックコミュニティー

代表技術通信~Unityのことをちゃんと勉強する③ Unity用にC#勉強(1)

草場代表
2020/09/29

こんばんは。代表の草場です。

うーん、学習を早くしたいですが、学習率が悪いので時間がかかる、もどかしい日々です。頭よくなりたいですね。
昨日は一日研修が2回、会議が4件、と充実した一日でした。
未来技術推進検定 SDGs編の第一回記念、ということで、ボードゲーム体験会を大々的にやります!ウェブ会議システムRemoを使います。UI素敵です。その打ち合わせも行いました。初めてのことでわちゃわちゃでしたが、皆様のおかげで盛り上がりました。当日楽しみ。

さて、「【PointCloud】大量の点群データをUnityで読み込んでVR化する!【メタバース】」を早急に理解したいですがC#もUnityも初心者ということで学習中です。様々メディアありますが、
北ソフト工房さんの「C#練習問題集」と、XR-HUBさんの「【連載】Unityで学ぶC#入門」に絞ることにしました。

まずは「[第3回] C#スクリプトの作成・実行方法を学ぶ|Unityで学ぶC#入門」から。

早速、UnityでC#スクリプトを作成するします。Unityでプロジェクトを作成(テンプレートは3Dにしました)。以下のような画面まで進めてください。プロジェクトウィンドウのAssetフォルダ内で、右クリック、「Create」→「C#Script」を選択します。

できたC#スクリプトの名前をTestにして、ダブルクリック、Visual Studioが開きます。

構造を見ていきます。

・usingディレクティブ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

usingディレクティブを使用することで、名前空間で型の使用を許可することができます。これにより、その名前空間内では型を修飾せずに使用できます。

名前空間は、この記事が参考となります。フォルダみたいなもの、と考えればいいらしい。

・クラス定義
public class Test : MonoBehaviour{
}

クラスを定義しています。クラスとは機能の設計書のようなものです。クラスをC#ではこのように定義します。ここではパブリックなTestクラスを、MonoBehaviourを継承して定義しています。

Pythonかじっててよかった。

・スタート関数
// Start is called before the first frame update
void Start(){
}

Unity特有の関数で、プログラムを呼び出したときに実行される関数です。現段階では通常のMain文に代わるものという認識で構いません。

・Update関数
// Update is called once per frame
void Update(){
}

Start関数と同じくUnity特有の関数で、毎フレームごと呼び出され実行される関数です。簡単にいうと常に呼び出され続ける関数です。Unityでのゲーム開発においてとても便利な関数です。

では、スクリプトを書いていきます。スタート関数内に、
Debug.Log(“Hello World”);
を追加。これを実行します。Unityの画面で、メニューバーの「Window」→「General」→「Console」を選択。これで実行できます。

では実行!の前に、ゲームオブジェクトを作成します。「UnityではゲームオブジェクトにC#スクリプトを取り付けることでプログラムを実行することができます。」
ヒエラルキーウィンドウ左上のCreate→「CreateEmpty」を選択。

スクリプトを先ほど作成したゲームオブジェクトに設置します。先ほど作成したTestスクリプトをプロジェクトウィンドウで選択してヒエラルキーウィンドウにあるゲームオブジェクトにそのままドラッグ&ドロップすれば完了。ゲームオブジェクトのInspectorに表示されました。

;をあえて抜かしたところ、確かにエラー。
Assets\Test.cs(11,34): error CS1002: ; expected

入れると通るはず!が!!あれ?エラー?
Assets\Test.cs(11,9): error CS0104: ‘Debug’ is an ambiguous reference between ‘UnityEngine.Debug’ and ‘System.Diagnostics.Debug’

調べると、以下らしいです。

debug.log ではなく、UnityEngine.Debug.Log と書いてください。大文字小文字、全角半角も間違えずに。CS0104 は同じ名前のものが複数あるため、どれのことを言っているかわからないというものです。したがって、このように名前空間から書けば解消されるはずです。

実際に実行して確認。Unity画面の真ん中上部にある再生ボタンを押して実行できます。Consoleウィンドウにメッセージ出ました。

今日はここまで。

この記事を書いた人
草場代表
エディター