ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Unity - インスタンス化せずに他のスクリプトの関数を使う方法

初めに

 C#で他のスクリプトにある関数を使うには、基本的には、そのスクリプトのクラスのインスタンスを取得する必要があります。本記事では、インスタンス化せずに他のスクリプトの関数を使う方法を2つ紹介します。



静的メソッドを使う

静的とは

 静的については、以前、記事にまとめたのでそちらをご覧ください。

fineworks-fine.hatenablog.com

静的メソッドを使い、他のスクリプトの関数を使う方法

 静的メソッドを使用することで、インスタンス化せずに関数を使うことができます。

(やり方)

  • クラス、関数を static で定義する
  • (クラス名).(関数名) で呼び出す

(例)
 クラス、関数を static で定義する

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static class UsefulMethod  //staticでクラスを定義
{
    public static string MainCharacterName = "Character";

     //staticで関数を定義する
    public static GameObject GetMainCharacter()
    {
        return GameObject.Find(MainCharacterName);
    }
}

  (クラス名).(関数名) で呼び出す

GameObject chara = UsefulMethod.GetMainCharacter();
static の注意点

 インスタンス化することがオブジェクト指向の良さであったりします。

(参考:static の注意点)
tech.pjin.jp

全体で統一したいものについては、static であるべきですが、そうでないものはちゃんとインスタンス化するようにしましょう。

名前空間を作る

 呼び出したい関数をまとめた名前空間を作る方法もあります。

(例)
 名前空間の作成

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace MyMethod
{
    public class UsefulMethod
    {
        public string MainCharacterName = "Character";
        public GameObject GetMainCharacter()
        {
            return GameObject.Find(MainCharacterName);
        }
    }
}

 名前空間に自作したものを追加し、関数の呼び出す

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MyMethod;  //自作した名前空間を追加

public class CharacterColliderTest : MonoBehaviour
{
    void Start()
    {
        UsefulMethod UMethod = new UsefulMethod();  //インスタンス化
        GameObject chara = UMethod.GetMainCharacter();
    }
}

最後に

  • 全体で統一したいものであれば、インスタンス化しなくてよいので、static でよい
  • 名前空間を作って他のスクリプトの関数を呼び出すのは、構造が複雑化しそうなのであまりしないほうがよいかもしれない