Unity研究所<Unityによるゲーム開発、映像開発>

Unity初心者おやじが綴るゲームで小遣い稼ぎできるようになるまでのブログ

Unityをこれから始める方へ 私の経験からの「こうしておけばよかった」 その2

Unityを学習するにあたり、最初はまずはHPとか検索すると思うが、さすがに書籍ほど丁寧な説明はなく、参考書を購入してこれを見ながらUnityEditor触るこれがよいと思う

 

ただし、この手の参考書は、なかなか高額で、分厚くて重い

さらに小さな書店にはあまりおいていないが、大きな書店に行くと案外たくさん並べられており、どれを購入したらよいか迷うと思う

 

ということで、初心者の方向けに、私の経験、購入した書籍と感想を簡単に紹介する

 

なお、数年前のことなので、Unityのバージョンも古かったりするので、もし参照される場合は最新版を探すことをお勧めする

 

◆購入した書籍、使ってみた感想

①10日で学ぶUnity5 2Dゲーム入門 

 おすすめ度:☆☆☆★★

books.mdn.co.jp

まったくUnityを触っていない状態からのスタートだったので、どうせ長続きしないだろう、3Dはいきなりハードルが高いだろうと、Unityの書籍自体の値段も高いので、薄目、安めで本屋を物色

立ち見した中ではぱっと見文字も大きく、作成するアプリの題材も主人公のキャラが魚に食べられるというようなゆるい感じだったため購入

 

■使ってみた感想

良かった点

  • いったんUnity Editorのざっくりとした使い方、Unityでゲームを作るざっくりとした手順、初歩的な作法的なものは学べたのではと思う

 

悪かった点

  • 当然これ一冊で、じゃあ次はオリジナルゲーム制作開始!!とは、さすがにならない

  「10日で学ぶ」というキャッチフレーズの通り、初歩の初歩が学べる程度

  • 値段が高い まあ、この手の書籍は全般高い中では比較的安め

 

■どのような人向け

まずは短期間でUnity体験したい、使ってみたいという方、ゲーム開発、プログラミング言語未経験の方にお勧め 

 

 

 

②Unityの寺子屋 定番スマホゲーム開発入門

 おすすめ度:☆☆☆☆★

books.mdn.co.jp

 

①終了の時点では、まだ本の通りに入力してざっくりとした流れを体験した程度で、自分で触れる気はしなかったため、次の参考書を物色

こちらは結構有名で、定番とのうわさと、スマホゲーム開発入門というところ、2Dのみというところで購入

 

■使ってみた感想

良かった点

  • ①の書籍よりは、スマホゲーム開発入門ということもあり、サンプル素材も含め、割と本格的な2Dゲーム開発の体験ができる
  • Unityの学習だけでなく、2Dゲーム開発のヒント、秘法的なものが掲載されている

 

悪かった点

  • スマホゲーム開発入門とはなっているが、スマホに書き出す(ビルド)して遊ぶまでの解説はされていない

 

■どのような人向け

①は短期間での体験向けだったが、こちらはボリュームもあり、入門とはしているものの勉強になるTipsはいろいろ掲載されている

初心者から、初級者を脱出して中級者へ向かいたい人へおすすめ

初級者が中級者へ昇るステップとなるかと

 

 

 

③Unity2021入門

 最新開発環境による簡単3D&2Dゲーム制作

 おすすめ度:☆☆☆☆☆

www.sbcr.jp


②でだいぶUnityEditorの使用方法、制作手法の概要的なものが理解できて来たので、次は3Dでのゲーム制作を勉強したくなり購入

こちらも定番書籍のようで、だいたいUnityのバージョンに合わせて最新版が発行されている

 

ちなみに私が購入したのはUnity5のころ

 

■使ってみた感想

良かった点

  • 3Dともなると2Dと違い、背景も3Dセットになるため、3Dのオブジェクトの扱い方や、テクスチャの設定、Terrainでの地形の作成などの方法も勉強することができる
  • Asset Storeからの素材のダウンロードや、エフェクトの使用方法等、3Dでのゲーム制作の基礎を学ぶことができる

 

悪かった点

  • 特になし

 

■どのような人向け

初心者から、始めたばかりなので2Dをメインに触っていたが、3Dゲーム開発の体験もしたいという方にお勧め

プログラミング言語的な解説、サンプルは最小限にして、UnityEditorの操作、3Dオブジェクト操作、簡単な背景セットなどの作成の解説に特化している

 

 

 

④Unityの教科書

 おすすめ度:☆☆☆☆☆

www.sbcr.jp

私が購入したのは2019年度版くらいだが、上記は最新版のリンク

 

こちらの書籍は、スマホに書き出す(ビルド)して、スマホで実行するところまでを解説しているので購入

 

■使ってみた感想

良かった点

 

悪かった点

  • 特になし
  • さすがにスマートアプリの広告実装方法まで載っていない

 

■どのような人向け

他の書籍でUnity Editorの操作や、Unityでのゲーム開発の概念的なものがある程度理解できている方

中級者

スマートフォンアプリを開発して、Google PlayApp Storeへの自作アプリの公開を目指したい方

 

UnityEditorの使い方、基礎的なところよりも、本格的なスマートフォンアプリ開発へ向けた基礎に特化しているため、まったくの初心者からこの書籍でスタートするのはちょっとおすすめをためらう

③をやったあとが良いかも

 

 

⑤Unity5 ゲーム開発レシピ

 ハマるゲーム制作のノウハウ

 おすすめ度:☆☆☆☆☆

www.shoeisha.co.jp

こちらは入門書ではなく、ゲーム制作のノウハウ書

例えば、相手の攻撃を受けたときに画面を揺らす方法など、ゲームでのありがちな演出等のケースに応じたUnityでの実装方法が解説されている

どうやら更新された書籍はない様子

Unity5のころの書籍なので、現在のUnityのバージョンでは設定方法とか違う点もあるかもしれないが、それでも実装方法については参考になると思う

 

■使ってみた感想

良かった点

  • ゲームの実装にあたり、キャラクタの制御とか、こんな演出つけたいとか、やりたいことはあってもどのようにしたらUnityで実装できるかは、ものによっては我流でも思いつくと思うが、いざとなると経験がものをいうので、大変参考になった
  • さすがにすべてを一から検討して実装するというのは効率が悪く、モチベーションの低下にもつながるので、こうしたゲーム実装上のノウハウ集というのは大変役に立つ

 

悪かった点

  • 特になし

 

■どのような人向け

Unity Editor自体の操作、実装の流れなどはおおむね理解できている方

3Dアクション系のゲームのUnityでの実装のノウハウが欲しい方

 

 

◆まとめ

今回は、私が参考にした書籍、及びレビュー的な内容を紹介した

今振り返ってみると、①はあまり必要ではなく、②か③からスタートしてもよかったと感じている

ただし、新しいことを始めて継続させるには、最初の印象が良く、次につながるモチベーションが持てるかが大事で、最初の段階でどれだけ「できた感」「やれる感」が持てるかだと思う

そういった面では、人それぞれのレベル、好みもあるので、①もお薦めできなくはない

 

なお、私自身も書籍だけでなく、Untiy公式HP、youtubチャンネルや、一般の方のyou tubeの解説動画、Udemyの講座なども受講して勉強しているので、上記のような書籍での勉強だけでなく、幅広く見てみることをおススメする

 

次回は、書籍以外に参考にしたHP等を紹介しようと思う

 

今回は以上

 

Unityをこれから始める方へ 私の経験からの「こうしておけばよかった」 その1

いまさらながら、私がどのようにUnityを始め、スマホアプリが作れるようになったかを書き残しておく

と偉そうに書いているが、大した実績もないので、悪しからず

ただ誰かの参考になればと・・・

 

◆私のプロフィール

 法学部卒

  • プログラムは学校で学んだ経験ゼロ
  • 社会人になってから趣味でVisual Basic、Visual Stadioを勉強していた程度

 

 Unityとの出会い

  • 仕事でゲーム開発のための企画、映像制作を行っていたが、管理職ともなると実制作は減り、プロジェクトの進行管理、業務管理、組織管理が増えるが、スケジュールの遅延、開発費の高騰が問題となっており、業務を効率化できるツールを探していた
  • 映像制作は、3Dモデルで作成し、アニメーションをつけて、長時間のレンダリング、さらにポストエフェクトをかけて再度レンダリング、というように実際の作業以外にレンダリングという待ち時間が発生するため、修正が発生するとまたやり直し。かなりのロスが発生する
  • そこで、何か良いツールがないかを物色中協力業者の方からUnityを紹介いただく
  • リアルタイムで3D映像が再生できれば、レンダリング時間も短縮されて、効率が良いのではということで、勉強を始める

 

 前置きが長くなったが、プログラミングの知識は少しはある程度だが文系

 中間管理職ともなると、歳も相応、いわゆる中年オヤジ

 このような前提でのUnityをどのように勉強していったかの体験、及び

 「こうしておけばよかった」というものなので、この前提で見てほしい

 

その2

harukichi.hatenadiary.jp

 

 

 

 

 

Unity 小ネタ 実行時に追加したデータのJsonファイルへのデータ保存、読み込み 

前回は、Unityで作成したアプリの実行中に、データ入力用のUIフィールドを追加して、値を編集するようなものを作成したが、せっかく編集しても保存できなければ意味がないので、今回はJsonファイルへの保存、読み込みについて紹介する

 

〇前回の記事

harukichi.hatenadiary.jp

 

〇今回解説する機能の動作イメージ

①データ入力フィールドを動的に作成
②データを入力

③ファイルに保存ボタンを押すと、データがJsonファイルに保存される

④データを消去して、データ読み込みボタンを押すとJsonファイルからデータを読み込んで、フィールドが復元される

 

ちなみに、Jsonファイルの中身は下記の通り

{
    "dataSets": [
        {
            "number": 0,
            "data": [
                1,
                2,
                3
            ],
            "isCheckOn": false
        },
        {
            "number": 1,
            "data": [
                4,
                5,
                6
            ],
            "isCheckOn": false
        },
        {
            "number": 2,
            "data": [
                7,
                8,
                9
            ],
            "isCheckOn": false
        }
    ]
}

 

今回のサンプルでのデータ形式は上記からもわかる通り、下記のデータが一塊となっている(以下データセットと呼ぶ)

int number

int data[3]

bool isCheckOn

 

ここまでなら簡単だったのだが・・・・

 

実行時に動的に上記のデータセットを追加したいとなると、データセットの配列をJsonファイルに保存する必要が出てくる

 

今回はこの点の実装にかなり苦労した(知識がなかっただけだが・・・)

 

◇やることの概要

◆保存の手順

①保存したいデータのクラスを作る 頭に[System.Serializable]をつける必要あり

②JsonUtilityを使用してクラス内のデータを文字列に変換

③ファイルに保存

 

◆読み込みの手順

①ファイルを開く

②ファイルから読み込んだ文字列を、JsonUtilityを使用してクラス形式に変換

③クラス内のデータをUIに反映

 

◇詳細

〇基本のJsonファイルへのデータの保存

 using System.IO;

 

 //基本的にはJsonUtilityというものが用意されているので、これを使用するだけ

 //第一の引数が保存したいクラスデータ、第二引数はファイルの中で改行するかどうか

     string jsonstr = JsonUtility.ToJson(dataSet,true);

 

  //ここからは一般的なファイルの保存

     StreamWriter writer;

     writer = new StreamWriter(Application.dataPath + "/DataSet.json", false);
     writer.Write(jsonstr);
     writer.Flush();
     writer.Close();

 

〇読み込み

        string datastr = "";
        StreamReader reader;
        reader = new StreamReader(Application.dataPath + "/DataSet.json");
        datastr = reader.ReadToEnd();
        reader.Close();

  //ファイルから読み込んだ文字列をJsonUtilityにてクラス形式に変換

  dataSet=JsonUtility.FromJson<DataSet>(datastr);

 

〇上記で保存に使用したクラスデータ  

[System.Serializable] ⇐こいつを記載すると保存の対象になる
public class DataSet
{
    public int number;
    public int data=new int[3];
    public bool isCheckOn;

}

 

〇上記のクラスデータの配列の保存の手順

 上記の基本クラスの配列をデータとしたクラスを作成し、こちらをJsonUtilityで変換する

 ◎注意点

  ・MonoBehaviourを継承しているクラスは変換できない

  ・UnityのUIが変数として含まれていても変換はされるが、Jsonファイルの中がごちゃごちゃになる印象

   直接Jsonふぁるの中身を修正したいような場合に困りそう。

   今回はデータのみのクラスを作成した

 

//配列のクラス

[System.Serializable]
public class SaveDataArray 
{
    public DataSet dataSets; 
}

 

//具体的な処理//////////////////////////////////

//保存

    public void OnSaveButtonDown() 
    {

  //クラスのインスタンスを用意(やらないとインスタンスがないエラーが出る)

  //データセットの個数分割り付ける

        saveDataArray = new SaveDataArray();
        saveDataArray.dataSets = new DataSet[DataSetList.Count];

  

  //生成されているデータの配列から、保存用のクラスのデータ配列にコピー

        for (int i = 0; i < DataSetList.Count; i++)
        {
            saveDataArray.dataSets[i] = DataSetList[i].GetComponent<DataSetManager>().dataSet;

        }

  

  //データセットの配列クラスをJsonUtilityで文字列に変換

        string jsonstr = JsonUtility.ToJson(saveDataArray,true);

  //ファイルに保存
        StreamWriter writer;

        writer = new StreamWriter(Application.dataPath + "/DataSet.json", false);
        writer.Write(jsonstr);
        writer.Flush();
        writer.Close();

    }

 

//読み込み

    public void OnLoadButtonDown()
    { 

  //ファイルから読み込み 
        string datastr = "";
        StreamReader reader;
        reader = new StreamReader(Application.dataPath + "/DataSet.json");
        datastr = reader.ReadToEnd();
        reader.Close();

 

  //JsonUtilityでデータセットの配列クラスをクラスデータに変換

        saveDataArray=JsonUtility.FromJson<SaveDataArray>(datastr);

  //UIを生成してデータを反映

        for (int i = 0; i < saveDataArray.dataSets.Length; i++)
        {
            GameObject tempObj = Instantiate(DataSetPrefab, parent);
            DataSetList.Add(tempObj);

            tempObj.GetComponent<DataSetManager>().dataSet = saveDataArray.dataSets[i];

            tempObj.GetComponent<DataSetManager>().UpdateData();
        }

    }

 

〇まとめ

 ・JsonUtilityを使用すると、クラスのデータを文字列に変換、復元できる

 ・JsonUtilityが使用できるクラスは、MonoBehaviourの継承NG

 ・保存するクラスの定義の頭に[System.Serializable]

   ・データの配列も使用可能

  今回の例は、基本のデータセットと、このデータセットの配列を作成し、配列の方をJsonUtilityにて変換してファイルに保存した

 

 Unityでのデータの保存は、PlayerPrefを使用してというやり方もあるが、大量のデータや、動的に増えるデータの扱いには向いていないと思われるので、用途に合わせてどちらを使用するかを決めることになる

 

今回は以上

 

 

 

 

 

Unity 小ネタ UIで作ったデータ入力フィールドのセットの追加、削除

Unityでゲームを作る際に、パラメーターの調整用とか、デバック用としてツールを作ることがあるが、今回はそのツールを作った際のテクニック?!的なものを書き残しておく

(用途があるかというと・・・)

〇上記の解説

・パラメーターが3つと、管理番号がセットになっているデータ(以下データセット)がある

・実行時に「データセット追加」ボタンを押すと、データセットが追加される

・各データの右についているチェックマークをチェックして、「データセットの削除」ボタンを押すとチェックがついているデータが削除される

 

〇作り方の概要

①データセットのPrefabの用意、自動でレイアウトされるように調整

②「データセット追加」ボタンを押してデータセットを生成するスクリプトを作成

③「データセット削除」ボタンを押してチェックしたデータセットを削除するスクリプトを作成

 

①データセットのPrefabの用意

データセットは、番号用のテキスト、パラメーター3つ入力用のInputField、チェック用のToggleを一セットとして、Prefab化

 

 

追加されるデータセットは、量が多くなってもスクロールして確認できるように、ScrollViewのContentの下にぶら下がるようにしている

また、データをぶら下げるDataSetLootにVerticalLayout Groupを追加して、Spacingの値をちょうどいい間隔となるように調整

Child Force Expandのチェックはデフォルトでは入っているが非チェックに

 

②「データセット追加」ボタンをおしてデータセットを生成するスクリプトを作成

7、8行目

Prefabをインスペクタにて割付

データセットをぶら下げる親のTransformも割り付けられるようにする

 

17行目~

「データセット追加」ボタンを押したときに呼ばれる関数

データセットのPrefabをInstantiateにて生成

parentの子オブジェクトとしてぶら下げる

DataSetListに追加しているのは番号付け、削除の時用

 

③「データセット削除」ボタンを押してチェックしたデータセットを削除するスクリプトを作成

27行目~

「データセット削除」ボタンを押したときに呼ばれる関数

 

29行目~35行目

削除するデータを覚えておくためのリストを作成

親オブジェクトにぶら下がっているデータセット分、チェックされているかを確認し、されていたら削除リストにデータを追加

 

40行目~47行目

削除用のデータリストに入っているオブジェクトをDestroy関数で削除

残っているデータ管理用のリストに再度残っているデータセットを追加

42行目で親のオブジェクトをnullにしているのは、こうしないとオブジェクトを削除しても子オブジェクトの数が更新されずに残ってしまったため

 

54行目~

データの番号を最初から振りなおす

 

〇今回のポイント

・子オブジェクトはTransform経由でGameObjectとして取得が可能

・Prefabの生成時に親オブジェクトを指定すると、指定した親の子オブジェクトとして生成される

 

久々の更新だが、ネタ切れ感が満載 ( 一一)

次回は、作成したデータセットJsonファイル化の予定

 

以上、今回はここまで

 

 

Unity、c#、VS小ネタ

c# stringの変数の中身が空かを調べる

 String. Is Null OrEmpty(String value)

 valueが空だとtrueが帰ってくる

 value==""も同じな気はするが精度は怪しい

 

◆VSでコーディング補完

 ifと入力の後にTABを二回押すと、(){}を自動で入力してくれる

 

 

Unity 小ネタ 汎用オブジェクトの使いまわし

f:id:Harukichi:20210923181339g:plain


こんなアプリを作っていて、ふと思った

 

本当のぱちんこなら、玉は発射するたびに作るわけではなく、かつ、いらなくなったら捨てるわけでもなく、内部またはお店の設備の中で循環して使いまわしているはず

 

リソースは有限

使えるなら使いまわした方がECOというもの

 

アプリのメモリ、リソースも有限

特にスマホアプリならなおさら・・・

 

ということで、作っているアプリでも、毎回玉のPrefabから生成して、いらなくなったら捨ててというのをやめて、最初から一定数作っておいて、盤面上に出てないやつを次に盤面上に発射するようにしてみる

 

スクリプト

//スタート関数内で下記を呼び出して、一定数生成したオブジェクトを配列に入れておく

    void SetupTamaArray()
    {
        TamaArray = new GameObject[TAMARRRAYSIZE];

        for(int i = 0; i < TAMARRRAYSIZE; i++)
        {
            TamaArray[i]=Instantiate(TamaPrefab, transform.position, transform.rotation);

   //オブジェクトは非アクティブにしておく
            TamaArray[i].SetActive(false);

     }

 

 

//玉の生成、盤面への発射

    void TamaSpawn()
    {

  //最初は下記のように毎回玉を生成していた
       // Rigidbody rb = Instantiate(TamaPrefab, transform.position,    transform.rotation).GetComponent<Rigidbody>();


        float currentPower = power;
        currentPower*= Random.Range(1.0f, 1.0005f);
        Rigidbody rb = new Rigidbody();

 

        for (int i = 0; i < TAMARRRAYSIZE; i++) {//配列の中から使っていないものを検索


            if (!TamaArray[i].activeSelf) //オブジェクト非アクティブならこれを使う
            {

    //玉を発射するための準備 位置、角度、移動量を初期化 
                TamaArray[i].transform.position = transform.position;
                TamaArray[i].transform.rotation = Quaternion.identity;
                rb = TamaArray[i].GetComponent<Rigidbody>();
                rb.velocity = new Vector3(0, 0, 0); //前回のものが残っていると不都合なので

 

    //初期化したらアクティブに
                TamaArray[i].SetActive(true);

    //盤面上に発射

                rb.AddForce(Vector3.up * currentPower, ForceMode.Impulse);

    //非アクティブなものが見つかったので、検索は終了
                break;
            }

        }

 

    }

 

 //玉が盤面外に排出されたらコライダーで検知して、非アクティブ化する

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Tama"))
        {

            // Destroy(other.gameObject); 最初は毎回削除していた

            other.gameObject.SetActive(false); //非アクティブ化

        }
    }

 

今回の説明は以上

では、実際どのくらい無駄が減ったとか、パフォーマンスが上がったのかを知りたいところであるが・・・

 

見た目は・・・

 

 

変わらんなぁ

 

まあまあのCPU、グラボを積んだPC上では見た目でわかるはずはないわなぁ

 

数値で確認したいところだが、やり方がわからない

 

数値でのパフォーマンスの違い確認は、次回の宿題としておこう

 

〇余談

普通の人は興味ないと思うが、あらかじめ玉のオブジェクトは15個作ってみたが、実際に同時に使われるのは6個もなかなかいかない感じだった

 

あと、玉のオブジェクトを非アクティブ化しても打ち出されて落下した際の慣性というか、重力というか・・は残っているので、これを再度発射する際にはクリアしておかないとまともに玉が飛んでくれなくなる

 

これに気づかず、解消するために結構時間がかかった(T_T)/~~~

 

今回は以上

 

 

 

 

 

 

 

 

 

 

Unity 小ネタ 別のオブジェクトへ処理が終了したことを通知する UnityEventの活用

あるオブジェクトが動作を終了したタイミングで、他のオブジェクトが動作を開始するような処理を実装する場合に、どのような方法を思いつくだろうか?

 

アニメーションであれば、アニメーションのタイムライン上にイベントを設定して、別な処理を割り付けて、ということは可能

 

では、上記ではなく、スクリプト内のある処理の実行が終了したことを、別のオブジェクトに通知したいような場合はどうするか?

 

 オブジェクトA :処理を実行し、終了したらオブジェクトBに通知

 オブジェクトB :ある処理を実行

 

〇実装案

オブジェクトAは処理が終了したらフラグを立てる

オブジェクトBは、Update関数内からオブジェクトAの終了フラグを毎フレームチェックする

 

上記は、Update関数で毎フレーム監視するというのは効率が良くないし、フラグが別の処理で更新されたりしたらややこしいことになりそう

 

できれば、処理が終了した時にイベントを発生させて、オブジェクトBの処理を呼び出したいところ・・・

 

 

 

ということで、ググっていたら、良い方法が見つかったので書き残しておくことにする

 

〇UnityEventを活用して、カスタムのイベントを発生させる

 テスト的に作ってみたのがこれ!!

f:id:Harukichi:20211003221052g:plain

①スタートボタンを押すと、スクリプトAが三秒間のカウントダウンを開始

②終了したらイベント発動

スクリプトBのテキストの更新処理を呼び出す

 

 

スクリプト

オブジェクトA/////////////////////////////////////////////////////////////////// 

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events; //イベントを使用する場合はこいつが必要

public class AManager : MonoBehaviour
{
    [SerializeField] Text Msgtext;
    float counter = 0;
    [SerializeField]  UnityEvent customEvent; //インスペクターで割り付けられるようにする


    public void CountDownStart()
    {

        StartCoroutine(Countdown(3f));

    }

    IEnumerator Countdown(float duration)
    {
        counter = duration;
        while (counter > 0) {

            counter -= 0.05f;
            Msgtext.text = "スクリプトA 実行中" + counter.ToString("f3");
            yield return new WaitForSeconds(0.05f);


        }
        Msgtext.text = "スクリプトA 終了";
        yield return new WaitForSeconds(1f);

        Msgtext.text = "スクリプトA イベント発動";

        customEvent.Invoke(); //処理が終了したのでイベントを発動

    }

 

}

 

オブジェクトB///////////////////////////////////////////////////////////////////

using UnityEngine;
using UnityEngine.UI;
public class BManager : MonoBehaviour
{
    [SerializeField]   Text textB;

    public void UpdateText()
    {

        textB.text = "スクリプトB : イベントを受信";

    }
}

 

 

インスペクタ上でイベントが発生した時に実行するオブジェクトBの処理を割り付け

f:id:Harukichi:20211003221714p:plain

 

本当にUpdate関数で監視するより処理負荷が低いかは定かではないが、スクリプトがわかりやすく、処理の流れも一方向のため、間違えは起きにくそうな印象

 

10/23追記

 上記のままだと、イベントを発生させるまでもなく、オブジェクトBの関数を呼び出すだけでよいのでは、という疑問がわくところ

 

 このようなイベントが役に立つのは、オブジェクトBの関数を呼び出すオブジェクトが複数あり、呼び出し元毎に処理を変えるような場合だ

 

    public void UpdateText(int index)
    {

        switch(index){

        case 0:

           textB.text = "スクリプトB : オブジェクト0からイベントを受信";

              break;

        case 1:

           textB.text = "スクリプトB : オブジェクト1からイベントを受信";

              break;

    }

 

 

今回は以上