UnityEngine擬似コードから考えるC#スクリプトの振る舞い
UnityのStart()メソッドの内部処理を疑似コードから見てみましょう。
GameObjectのコンポーネントへのアクセスについても同時に学びます。
using System;
using UnityEngine;
public class SampleScript : MonoBehaviour
{
public void Start()
{
gameObject.transform.Position = new Vector3(1.0f, 2.0f, 3.0f);
// gameObject.transform.Position.x = 10;
gameObject.GetComponent<Transform>().Position = new Vector3(10.0f, 20.0f, 30.0f);
Console.WriteLine(transform.Position.y);
}
public void Update()
{
Console.WriteLine("updata");
}
}
Unityエンジンの疑似コード(説明用なので実際のコードとは一致しません)
// UnityEngine内部構造のシミュレーション
namespace UnityEngine
{
class Program
{
static void Main(string[] args)
{
GameManager manager = new GameManager();
manager.Run();
}
}
class GameManager
{
public void Run()
{
GameObject obj = new GameObject();
obj.sampleScript = new SampleScript();
obj.name = "Cube";
// スクリプトのStart()メソッドを実行
obj.sampleScript.Start();
// スクリプトのUpdate()メソッドを実行
while (true)
{
System.Threading.Thread.Sleep(1000);
obj.sampleScript.Update();
}
}
}
public class MonoBehaviour : GameObject
{
}
public class GameObject
{
// 自身のインスタンスを宣言。格納する変数
public GameObject gameObject;
public string name;
// コンポーネント(Transform)
public Transform transform = new Transform();
// コンポーネント(Script)
public SampleScript sampleScript;
// コンストラクタ。自身をセット
public GameObject()
{
gameObject = this;
}
// コンポーネント間のアクセスを可能にする。戻り値はコンポーネントのインスタンス。
public T GetComponent<T>() where T : Transform
{
return (T)transform;
}
}
// Transformコンポーネント
public class Transform
{
private Vector3 position;
private Vector3 rotation;
private Vector3 scale;
public Vector3 Position
{
get
{
return position;
}
set
{
position = value;
}
}
public Vector3 Rotation { get => rotation; set => rotation = value; }
public Vector3 Scale { get => scale; set => scale = value; }
}
// Vector3構造体
public struct Vector3
{
public float x;
public float y;
public float z;
public Vector3(float x, float y, float z)
{
this.x = x;
this.y = y;
this.z = z;
}
}
}
ディスカッション
コメント一覧
まだ、コメントがありません