UnityEngineのシミュレーションで学習(シンプル版)
詳細版が複雑になったので、ここではシンプル版としてみていきましょう
Unityエディターを使ったことがあり、スクリプトのアタッチができる方を対象としています
また、C#の基礎知識も持ち合わせている必要があります
目次
エディターの構成
GameObjectSampleスクリプトのみからのゲームオブジェクトにアタッチします
シミュレートコード
シミュレートのため、Unityの実際のクラス名にMyをつけて表現しています
実査のコードでは、MyComponentはComponentクラスとして考えます
GameObjectSampleスクリプト
using UnityEngine;
public class GameObjectSample : MonoBehaviour
{
void Start()
{
MyGameObject myGameObject = new MyGameObject("Player");
myGameObject.AddComponent<MySphereCollider>();
Debug.Log(myGameObject.name);
}
}
MyGameObjectスクリプト
using System.Collections.Generic;
using System.Linq;
public class MyGameObject
{
public string name { get; set; }
private List<MyComponent> components;
public MyGameObject(string name)
{
this.name = name;
components = new List<MyComponent>();
}
public T AddComponent<T>() where T : MyComponent, new()
{
T component = new T();
components.Add(component);
return component;
}
public T GetComponent<T>() where T : MyComponent
{
// LINQ の OfType<T>() メソッドを使用して、指定された型(T)にキャスト可能なすべての要素を選択し、
// その後 .FirstOrDefault() を使用して最初の要素を取得します。この方法は、指定された型の要素が
// 見つかった時点でイテレーションを停止します
return components.OfType<T>().FirstOrDefault();
}
}
MyComponentスクリプト
public class MyComponent
{
}
MySphereColliderスクリプト
public class MySphereCollider : MyComponent
{
}
MyGameObject クラスの概要
このコードはゲームオブジェクトを表すクラス MyGameObject を定義しています。以下に、コードの主要な要素とその説明を示します。
using
ステートメント:System.Collections.Generic
: ジェネリックなコレクションクラスを使用するための名前空間です。System.Linq
: LINQ(Language Integrated Query)を使用するための名前空間です。LINQはデータのクエリと操作を行うための機能を提供します。
MyGameObject
クラス:name
プロパティ: ゲームオブジェクトの名前を取得または設定するためのプロパティです。components
プライベートフィールド:MyComponent
クラスのインスタンスを格納するためのリストです。このリストはコンポーネントを管理します。
MyGameObject
クラスのコンストラクタ:MyGameObject(string name)
: ゲームオブジェクトを作成するためのコンストラクタです。引数としてゲームオブジェクトの名前を受け取り、名前を設定し、components
リストを初期化します。
AddComponent<T>()
メソッド:T
ジェネリック型のコンポーネントを追加するメソッドです。T
はMyComponent
クラスまたはそのサブクラスである必要があります。- 新しい
T
型のコンポーネントを作成し、components
リストに追加します。 - 作成したコンポーネントを返します。
GetComponent<T>()
メソッド:T
ジェネリック型のコンポーネントを取得するメソッドです。T
はMyComponent
クラスまたはそのサブクラスである必要があります。- LINQ の
OfType<T>()
メソッドを使用して、components
リスト内でT
型にキャスト可能なすべての要素を選択します。 FirstOrDefault()
メソッドを使用して、最初の要素を取得します。もし要素が見つからない場合はnull
を返します。- この方法は、指定された型の要素が見つかった時点でイテレーションを停止します。
このコードは、ゲームオブジェクトにコンポーネントを追加および取得するための汎用的な仕組みを提供しています。コンポーネントは、MyComponent
クラスまたはそのサブクラスである必要があります。これにより、ゲームオブジェクトに異なるタイプのコンポーネントを追加できます。
詳細版
詳細なシミュレートは次を参考にしてください
ディスカッション
コメント一覧
まだ、コメントがありません