Unity シンプルなコーディングガイド

1. コンポーネントの分割

  • ポイント:
    各スクリプトは1つの役割だけ担当する。
  • 例:
    プレイヤーの移動は専用スクリプトに分ける。
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float speed = 5f;
    void Update()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        transform.Translate(new Vector3(h, 0, v) * speed * Time.deltaTime);
    }
}

2. Updateの最適化

  • ポイント:
    毎フレーム不要な処理は避ける。条件が合うときだけ実行する。
using UnityEngine;

public class OptimizedUpdate : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Debug.Log("Space pressed!");
        }
    }
}

3. コルーチンの利用

  • ポイント:
    時間をかける処理は、コルーチンで分割実行する。
using UnityEngine;
using System.Collections;

public class CoroutineExample : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(FadeIn());
    }
    IEnumerator FadeIn()
    {
        for (float alpha = 0; alpha < 1; alpha += Time.deltaTime)
        {
            Debug.Log("Alpha: " + alpha);
            yield return null;
        }
    }
}

4. イベントの利用

  • ポイント:
    イベントでスクリプト間の連携を行うと、依存が少なくなる。
using UnityEngine;
using System;

public class ItemCollector : MonoBehaviour
{
    public static event Action OnCollected;
    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Item"))
        {
            OnCollected?.Invoke();
            Destroy(other.gameObject);
        }
    }
}

5. オブジェクトプーリング

  • ポイント:
    生成と破棄のコストを下げるため、オブジェクトを再利用する。
using UnityEngine;
using System.Collections.Generic;

public class ObjectPool : MonoBehaviour
{
    public GameObject prefab;
    Queue<GameObject> pool = new Queue<GameObject>();

    void Start()
    {
        for (int i = 0; i < 5; i++)
        {
            GameObject obj = Instantiate(prefab);
            obj.SetActive(false);
            pool.Enqueue(obj);
        }
    }
    public GameObject GetObject()
    {
        if (pool.Count > 0)
        {
            GameObject obj = pool.Dequeue();
            obj.SetActive(true);
            return obj;
        }
        return Instantiate(prefab);
    }
}

6. デバッグとテスト

  • ポイント:
    Debug.Logで状態確認。簡単なテストコードも作成できる。
using UnityEngine;

public class DebugExample : MonoBehaviour
{
    void Start()
    {
        Debug.Log("Game Start");
    }
}

7. シーン管理とアセット管理

  • ポイント:
    SceneManagerでシーン切替。Addressableで動的にアセットをロード可能。
using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneChanger : MonoBehaviour
{
    public void NextScene()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
    }
}

8. バージョン管理とコメント

  • ポイント:
    Gitでコード変更を管理し、コード内にシンプルなコメントを書く。
// プレイヤー移動処理
// コミット例: "Add basic player movement"

まとめ

  • 分割: 1スクリプト1役割
  • 最適化: 不要処理は避ける
  • 分割実行: コルーチンで時間をかける処理
  • 連携: イベントで疎結合に
  • 再利用: オブジェクトプーリングで生成負荷軽減
  • 検証: Debug.Logやテストで動作確認
  • 管理: シーン管理とバージョン管理を徹底

これらの基本を押さえると、初学者でもスムーズにUnity開発が始められます。

C#,Unity

Posted by hidepon