【Unity】別スクリプトの関数(メソッド)・変数を呼び出し渡す

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク

Unityで2つ以上スクリプトをつくったとき、別のスクリプトで定義した変数や関数を呼び起こしたい時があるかと思います。

また、別のスクリプトから変数をアクセス(使う)場合はstatic(静的)にする必要がありますが、static変数はゲームを終了して再開しても値を保持できないことやクラス間の依存関係の増加など致命的な問題があります。

したがって、本記事では、staticを使わずに、別スクリプトの関数を呼び起こす方法を紹介します。

本記事は次の人におすすめ
  • 別のスクリプトの関数を呼び出したい。
  • static以外で変数にアクセスしたい。
  • 「GetComponent<>();」の使い方を知りたい。
スポンサーリンク

GetComponent

GetComponentは、Unityでゲームオブジェクトにアタッチされたコンポーネントを取得するためのメソッドです。

取得には、次の通りに書きます。

GetComponent<コンポーネントの型>()

GameObjectは物理エンジンを適用させるRigidbodyを取得して、スクリプトから操作する場面が多く、以下のコードはRigidbodyコンポーネントを取得して、重力、質量、速度、移動を制御するコードになります。

// Rigidbodyコンポーネントを取得
Rigidbody rb = GetComponent<Rigidbody>();

// 重力を有効にする
rb.useGravity = true;

// 質量を変更する
rb.mass = 2f;

// 速度を変更する
rb.velocity = new Vector3(1f, 0f, 0f);

// 力を加えて移動させる
rb.AddForce(Vector3.forward * 10f);

GetComponentで別スクリプトの関数を呼び起こす方法

それでは、別のスクリプトから関数を呼び出す方法を解説します。

今回はスクリプト「ScriptA.cs」「ScriptB.cs」の2つを使います。

「ScriptB.cs」にて、スペースキーを押すと、「ScriptA.cs」の関数で変数を加算するコードです。

関連記事:「【Unity】UIボタンを押すごとに数字を増やし、クリックした回数をカウントをする

ソースコード

関数を渡す側

using UnityEngine;

public class ScriptA : MonoBehaviour
{
    int Count;
    public void MethodA()
    {
        Count++;
        Debug.Log(Count);
    }
}

関数を受け取る側

using UnityEngine;

public class ScriptB : MonoBehaviour
{
    private ScriptA scriptA;

    private void Start()
    {
        scriptA = GetComponent<ScriptA>();
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
       Debug.Log("Spaceキーが入力されました");
            scriptA.MethodA();
        }
    }
}

思い通りのゲームが作れない

Unityでゲーム開発しているけど完成しない。
技術的な壁や知識不足が原因で、思い描いたゲームを実現するのは難しいです。

しかし、Udemyは動画で実践的なゲーム開発を解説していて、
購入した講座は再生・停止・スキップなどが可能なオンデマンド形式なので、
専門的な内容を自分のペースで学習できます。

Udemyの特徴
  • プロのエンジニアによる講習が受けられる
  • 自分のペースで学習を進められる
  • オンデマンド形式だから何度でも視聴可能
  • 不満足なコースは視聴していても返金可能返金ポリシー

Unityの機能を網羅したいや作りたいゲームがある人はUdemy学習を取り入れましょう。
数多くある講座の中から特におすすめな講座を3つ紹介します。

Unityのはじめの一歩としておすすめ。開発例に物理挙動やアニメーションを使用しているので、今後の開発が円滑になる。

トランプを題材にした講座。カードゲームやボードゲーム開発に応用可能

UnityエンジンのインストールやC#の文法に加えて、App StoreとGoogle Playにゲームをリリース方法を解説。

容量不足を解消

Unityのプロジェクトは1.5GB~3.5GBと大きく、クリエイターはHDD・SSD増設が必要です。

価格耐久性静音性読み書きサイズ
HDD
SSD

注目点は、HDDは安価だけど壊れやすい。SSDは丈夫だけど高価。
したがって、データの持ち運びをしない場合はHDD、持ち運びする場合はSSDがおすすめです。

  • 据え置きHDD
  • 外付けSDD
  • 内蔵SSD

ぜひ、あなたのクリエイティブな作業環境に兼ね備えたストレージをお役立てください。

解説

初めに、「ScriptA」を解説します。

「Count」はint型変数で、関数「MethodA()」内で「Count」を1ずつ加算します。

    int Count;
    public void MethodA()
    {
        Count++;
        Debug.Log(Count);
    }

つづいて、「ScriptB」を解説します。

scriptAは、クラス「ScriptA」のprivateなインスタンス変数です。

クラス「ScriptA」の新しいインスタンスを作成して、変数「scriptA」に格納します。
よって、別のスクリプト(ScriptB)からScriptAクラスで定義されたメンバー変数、メソッド、プロパティにアクセスすることができます。

  private ScriptA scriptA;

また、Start()内で、privateな変数「scriptA」にGetComponentメソッドを使用して、スクリプトで定義されたメソッドや変数にアクセスします。

 scriptA = GetComponent<ScriptA>();

最後にUpdate()内で、スペースキーを押すと、スクリプト「ScriptA」内の関数MethodA()を実行させます。

if (Input.GetKeyDown(KeyCode.Space))
{
 Debug.Log("Spaceキーが入力されました");
scriptA.MethodA();
}

実演

完成した2つのスクリプトをHierarchyウィンドウにアタッチしてください。

再生ボタンを押して、スペースキーを押すと以下のようになります。

まとめ

今回は、staticを使わず、別スクリプトの関数を呼び起こす方法を紹介しました。

関数を呼び起こすためには、「GetComponent()」を使い、呼び起こしたい関数があるクラスの新しいインスタンスを作成して、privateな変数を定義します。

privateな変数を用意することで、そのスクリプト内のみで変数が有効になるので、別のスクリプトからの干渉を受ける心配はなくなります。

この記事を書いた人

プロフィール

アリッシア

                 

大学4年間で何か胸を張れるスキルを身に着けたくて当サイト運営を始めました。
現在、大学院に進学するか就職するか迷いながら勉強しています。
詳しいプロフィールはこちら

Contact icon

contact

X icon

X

Instagram icon

Instagram

Note icon

Note

スポンサーリンク
Unity
フォローする
タイトルとURLをコピーしました