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 を定義しています。以下に、コードの主要な要素とその説明を示します。

  1. using ステートメント:
    • System.Collections.Generic: ジェネリックなコレクションクラスを使用するための名前空間です。
    • System.Linq: LINQ(Language Integrated Query)を使用するための名前空間です。LINQはデータのクエリと操作を行うための機能を提供します。
  2. MyGameObject クラス:
    • name プロパティ: ゲームオブジェクトの名前を取得または設定するためのプロパティです。
    • components プライベートフィールド: MyComponent クラスのインスタンスを格納するためのリストです。このリストはコンポーネントを管理します。
  3. MyGameObject クラスのコンストラクタ:
    • MyGameObject(string name): ゲームオブジェクトを作成するためのコンストラクタです。引数としてゲームオブジェクトの名前を受け取り、名前を設定し、components リストを初期化します。
  4. AddComponent<T>() メソッド:
    • T ジェネリック型のコンポーネントを追加するメソッドです。TMyComponent クラスまたはそのサブクラスである必要があります。
    • 新しい T 型のコンポーネントを作成し、components リストに追加します。
    • 作成したコンポーネントを返します。
  5. GetComponent<T>() メソッド:
    • T ジェネリック型のコンポーネントを取得するメソッドです。TMyComponent クラスまたはそのサブクラスである必要があります。
    • LINQ の OfType<T>() メソッドを使用して、components リスト内で T 型にキャスト可能なすべての要素を選択します。
    • FirstOrDefault() メソッドを使用して、最初の要素を取得します。もし要素が見つからない場合は null を返します。
    • この方法は、指定された型の要素が見つかった時点でイテレーションを停止します。

このコードは、ゲームオブジェクトにコンポーネントを追加および取得するための汎用的な仕組みを提供しています。コンポーネントは、MyComponent クラスまたはそのサブクラスである必要があります。これにより、ゲームオブジェクトに異なるタイプのコンポーネントを追加できます。

詳細版

詳細なシミュレートは次を参考にしてください

Unity

Posted by hidepon