とある理系大学院から新入社員になった配信者ブログ

はじめましてnHMです。元大学院生の社会人です。よろしくお願いします!

【開発メモ①】by AI chat BING

どーも!nhmです😎

現在開発をどんどん進めております。

 

実は現在開発7日目ぐらいです(取り組んだ日のみ換算)。

 

今日は本当にただのメモを残していきますが

これからはより整理したものを添付するようにしていきます!

 

今はその先駆けという事で!笑

 

まず、開発手法は下記のとおりです。

簡単な仕様書作成→chatgpt4 or BING AI にコードを生成→unityへ実装→分からないコードを解説by chatgpt4 or BING AI

 

 

以下はBING AIによる解説を下手書きしたものです。コードを解説してもらいながら学習しています。

 

「カーソル移動を実装した時のスクリプトです」

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

このコードは、Unityというゲームエンジンで動作するカーソルのスクリプトです。

C#の基本的な構文やクラス、メソッド、プロパティ、フィールドなどについては、前述のチュートリアルで学ぶことができます。

ここでは、コードの主な機能やUnityの特有の要素について解説します。

まず、using UnityEngineという行は、UnityEngineという名前空間を使うことを宣言しています。

UnityEngineは、Unityの基本的な機能やクラスを提供するライブラリです。

次に、public class CursorScript : MonoBehaviourという行は、CursorScriptというクラスを定義しています。

このクラスは、MonoBehaviourというクラスを継承しています。MonoBehaviourは、Unityのスクリプトの基本的なクラスで、ゲームオブジェクトにアタッチすることで、そのゲームオブジェクトに様々な振る舞いを与えることができます。

次に、public GameObject cursorPrefab;という行は、cursorPrefabというフィールドを定義しています。このフィールドは、publicというアクセス修飾子が付いているので、外部からアクセスできます。GameObjectは、Unityのゲームオブジェクトを表すクラスです。 cursorPrefabは、カーソルとして表示するゲームオブジェクトのプレハブ(事前に作成されたゲームオブジェクトのテンプレート)を格納するためのフィールドです。

同様に、private GameObject cursorInstance; public float moveSpeed = 1f; public Vector3 initialPosition = new Vector3(0, 0.3f, 0); public Vector3 targetPosition; public static CursorScript instance; public float lerpSpeed = 5f; public GridManager gridManager;という行は、それぞれカーソルのインスタンス(実際に生成されたゲームオブジェクト)、カーソルの移動速度(単位はユニット)、カーソルの初期位置(ワールド座標系での位置)、カーソルの目標位置(移動先の位置)、CursorScriptクラスのシングルトンインスタンス(同じクラスのオブジェクトが一つしか存在しないことを保証するためのもの)、カーソルの移動時の補間速度(滑らかさを調整するためのもの)、グリッドマネージャー(グリッド状に配置されたマップを管理するためのもの)を定義するフィールドです。

次に、void Awake()というメソッドは、MonoBehaviourが提供する特殊なメソッドです。このメソッドは、このスクリプトがアタッチされたゲームオブジェクトがシーンにロードされた時に一度だけ呼び出されます。 このメソッドでは、instanceフィールドに自分自身を代入し、もしすでにinstanceが存在する場合は自分自身を破棄することで、シングルトンパターンを実現しています。

次に、Startメソッドは、Awakeメソッドの後に一度だけ呼び出されます。このメソッドでは、cursorPrefabをInstantiateというメソッドで複製して、cursorInstanceに代入しています。Instantiateは、プレハブやゲームオブジェクトをコピーするためのメソッドです。また、初期のグリッド位置を(0, 0)として、cursorInstanceの位置をinitialPositionに設定しています。targetPositionもinitialPositionと同じ値に設定しています。

次に、void Update()というメソッドもMonoBehaviourが提供する特殊なメソッドです。このメソッドは、フレームごとに呼び出されます。このメソッドでは、HandleInputというメソッドとMoveCursorというメソッドを呼び出しています。

HandleInputメソッドは、キーボードの入力を受け取って、targetPositionを変更するためのメソッドです。Inputというクラスは、UnityEngineが提供するクラスで、様々な入力デバイスからの入力を取得することができます。このメソッドでは、上下左右の矢印キーが押されたかどうかを判定して、それに応じてtargetPositionにmoveSpeed分だけ移動させます。ただし、targetPositionがグリッドマネージャーのマップの範囲外に出ないように制限しています。

MoveCursorメソッドは、cursorInstanceの位置をtargetPositionに向かって補間するためのメソッドです。Vector3というクラスは、UnityEngineが提供するクラスで、3次元ベクトルを表すことができます。

このクラスには、Lerpという静的メソッドがあります。

Lerpは、2つのベクトル間を指定した比率で線形補間するためのメソッドです。

このメソッドでは、cursorInstanceの位置とtargetPositionの間をTime.deltaTime * lerpSpeedで補間しています。

Timeというクラスは、UnityEngineが提供するクラスで、時間に関する情報を取得することができます。Time.deltaTimeは、前のフレームから現在のフレームまでの時間(秒)を表します。

これにlerpSpeedを掛けることで、カーソルの移動速度を調整できます。

最後に、public Vector3 cursorPositionというプロパティは、カーソルの位置を外部から取得できるようにするためのものです。

プロパティは、フィールドのように値を保持することができますが、getやsetというアクセサーを使って値の取得や設定時に処理を行うことができます。

このプロパティでは、getアクセサーだけを定義しており、targetPositionを返すようにしています。

以上がカーソルのスクリプトのコードの解説です。分かりやすかったでしょうか?

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜