Unity 22日目

AコンポーネントBスクリプトの中で引数として使用するとき

 

 

public PlayerUIManager playerUI;
public PlayerManager player; A
 
 void Start()
{
playerUI.UpdateUI(player);
}

 

B

public void UpdateUI(PlayerManager player)
{
        hpText.text = string.Format("HP:{0}", player.hp);
}


Bの()の中に取得したいコンポーネント、それにあたる関数を設定
そうすれば、取得したコンポーネントの中の値をメソッドの中で利用することができる。

自分流で一から作成したものとはかなり異なるということが分かりました。

 

今回はPrefabに設定したデータ(HP等)をUIに反映させるために、Prefabのコンポーネント取得方法を学びました。

 

public GameObject enemyPrefab1;
public BattleManager battleManager;


public void EncountEnemy()
    {
        stageUI.HideButtons();
        GameObject enemyObj = Instantiate(enemyPrefab1);
        EnemyManager enemy = enemyObj.GetComponent<EnemyManager>(); //Prefabのコンポーネントを取得して代入
        battleManager.SetUp(enemy); //PrefabのコンポーネントをSetUpに受け渡す
    }

勉強時間合計:35h

21日目 Unity 関数の中で他のスクリプトの関数を呼び出したいとき

お久しぶりです( ´∀` ) (誰も見てない)

本日は関数の受け渡しについて復習したいと思います。

 

例えば、、

スクリプトA

public PlayerManager player;
public EnemyManager enemy;

void Start()
    {
        player.Attack(enemy);  
        enemy.Attack(player);
    }

 

スクリプトB(PlayerManager)

public int at;

public void Attack(EnemyManager enemy) //関数の中でさらにEnemyManagerの中の関数を使う

{

       enemy.Damage(at); //PlayerManagerのatをEnemyManagerのDamageメソッドに渡す

}

 

こういうスクリプトがあるとします。

スクリプトBの関数の中でAで設定した他のメソッドを使うといった場合ですね。

まずはAの中でBのスクリプトを貼ったゲームオブジェクトを取得します。

 

あとはBの関数の引数を受け取る部分で、(EnemyManager enemy)このように関数ごと受け取ってしまいましょう!

 

スクリプトを3つ使用するという少し入り組んだ構造になっていますが、スクリプトAを中心に考えると分かりやすくなるかと思います。

 

勉強時間合計:34h

 

 

 

20日目 Unity 連想配列(Dictionary)

//配列の宣言
        Dictionary<string, int> a = new Dictionary<string, int>()
        {
            {"item1",8},
            {"item2",4},
            {"item3",12},
        };

        //上書き
        a["item1"] = 3;

        //要素の削除
        a.Remove("item1");

        //要素の初期化
        a.Clear();

 

例文

//Dictionary生成

 

Dictionary<string, int> scores = new Dictionary<string, int>()
    {
        { "国木田",99},
        { "津島", 0}
    };


    private void Update()
    {        
        if (true == Input.GetKeyDown(KeyCode.A))
        {
            scores["国木田"]++; //国木田の中身を++する
        }
        if (true == Input.GetKeyDown(KeyCode.A))
        {
            scores["津島"]++; //津島の中身を++する
        }       

  foreach(KeyValuePair<string,int> s in scores)
        {
            Debug.Log(s.Key + "" + s.Value); //string形+int形でデバッグする
        }
    }

 

2Dの勉強をしていましたが、なかなかうまくいかない箇所があり、気分転換で3Dの授業を受けてみました(泣

2Dの方では、publicでの取得からテキストの変更やボタンの動作など、完成系があればほとんどできるようになりました!ですが、、、

スクリプトごとに取得しているためつながりが分かりにくくなっていること、引数の受け渡し方法、PrefabをInstantiateした後にDestroyできないことなど、課題が山ほどあります。

ただ、確実にスクリプトの中身が読めるようになってきたこと、できないながらも方法を変えてチャレンジするなど、少しずつ進歩はしていると思います。

勉強時間合計:33h

Unity 19日目

本日はシーン、ボタン、Imageのタップの取得や、Prefab化、オブジェクトの生成や破壊、セーブ、Json化などを復習しました。

前回学習時はゲームの基本的な動作に関わる部分のみで演出までは進めていませんでした。今回は最初から復習したということもあり、前回よりもスピーディーに進められるかと思います。

 

1か月ほど期間が空いてからの再出発となりましたが、何となくやったことのあるという部分が多くなっていることが実感でき、手ごたえを感じています。

分からなかった部分に関しては、このブログを参考にしたら理解できました!(過去の自分、偉いb)

 

というわけで、次回からノンフィールドRPGの作成に取り掛かっていきたいと思います。

 

勉強時間合計:30h

Unity 18日目

C#のクラス作成は、プレイヤーや敵などをクラスごとに管理して、使うときにはそこにある関数を持ってくるのはわかりました。

しかし、プロパティという考え方がいまだに理解できず。。。

 

もしも今後使う機会があれば、優先的に復習したいと思います。(`・ω・´)b

 

勉強時間合計:29h

Unity 17日目

本日は3のつく数字を要素とするリストを返す関数を作成しました。

特に難しかったのが3のつく数字の判定でした。

この場合、新しく作った関数で判定し、Bool型で返すとすっきりします。

 

<例えば34251のとき>

1桁目→5桁目の順で判定をするとします。

1桁目は10で割ったときに余りが3なので、if(number%10 == 3)

2桁目からは10で割ったとき3になる場合なので、number = number / 10;

 

これを一つにまとめてWhile文にすると次のようになります。

 

while(number != 0)
        {
            if(number%10 == 3)
            {
                return true;
            }
            number = number / 10;
        }
return false;

これが難しかったですね。。。

 

勉強時間合計:28h

 

Unity 16日目

お久しぶりです。

コロナウイルスの影響で自宅待機だったものの、ここ1か月は通常通りに出社に…。

ブランクがあったのと、新しくできた後輩への教育もあり、なかなか時間が取れませんでした。そのためモチベーションがあがらず(´;ω;`)

 

本日はまたまたC#の復習です。配列あたりをやりましたが、Listを作る上で、List<int>型で作成してforeachで取得するのが一番簡単そうですね。

 

勉強ペースを落とさないよう、少しずつ進めたいと思います。

 

勉強時間合計:27h