(Unity)プレーヤーの移動速度を変える(ダイレクト/メソッド経由/自動プロパティ)

(前提)

・スピードアップアイテムを獲得すると、プレーヤーの移動速度が増加する。


(その1;フィールドの値をダイレクトに変更する)

<プレーヤーサイドのスクリプト>

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

public class BotController : MonoBehaviour
{
    public GameObject[] beamPrefabs;
    private int count;
    private int num = 0;

    // speedの変更(その1:publicにすることでダイレクトに変更する)
    public int speed = 5;

    void Update()
    {
        float moveH = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
        float moveV = Input.GetAxis("Vertical") * Time.deltaTime * speed;
        transform.Translate(moveH, moveV, 0);
    }

    private void FixedUpdate()
    {
        if(Input.GetKeyDown(KeyCode.Z))
        {
            num = (num + 1) % beamPrefabs.Length;
        }

        if(Input.GetKey(KeyCode.Space))
        {
            count += 1;

            if(count % 10 == 0)
            {
                GameObject beam = Instantiate(beamPrefabs[num], transform.position, Quaternion.Euler(0, 0, 90));
                Rigidbody beamRb = beam.GetComponent<Rigidbody>();
                beamRb.AddForce(transform.right * 1000);
                Destroy(beam, 2.0f);
            }
        }
    }
}

<アイテムサイドのスクリプト>

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

public class SpeedUpItem : Item
{
    private void OnTriggerEnter(Collider other)
    {
        if(other.CompareTag("Beam"))
        {
            ItemBase(other.gameObject);

            // プレーヤーの移動速度を上げるその1(ダイレクトにフィールドを変更する)
            GameObject.Find("MyBot").GetComponent<BotController>().speed = 10;
        }
    }
}

(その2;メソッド経由で変更する)

<プレーヤーサイドのスクリプト>

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

public class BotController : MonoBehaviour
{
    public GameObject[] beamPrefabs;
    private int count;
    private int num = 0;

    private int speed = 5;

    void Update()
    {
        float moveH = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
        float moveV = Input.GetAxis("Vertical") * Time.deltaTime * speed;
        transform.Translate(moveH, moveV, 0);
    }

    private void FixedUpdate()
    {
        if (Input.GetKeyDown(KeyCode.Z))
        {
            num = (num + 1) % beamPrefabs.Length;
        }

        if (Input.GetKey(KeyCode.Space))
        {
            count += 1;

            if (count % 10 == 0)
            {
                GameObject beam = Instantiate(beamPrefabs[num], transform.position, Quaternion.Euler(0, 0, 90));
                Rigidbody beamRb = beam.GetComponent<Rigidbody>();
                beamRb.AddForce(transform.right * 1000);
                Destroy(beam, 2.0f);
            }
        }
    }

    // speedの変更(その2:メソッド経由で変更する)
    public void AddSpeed(int amount)
    {
        speed = amount;
    }
}

<アイテムサイドのスクリプト>

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

public class SpeedUpItem : Item
{
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Beam"))
        {
            ItemBase(other.gameObject);

            // Botの移動速度を上げるその2(メソッド経由で変更する)
            GameObject.Find("MyBot").GetComponent<BotController>().AddSpeed(10);
        }
    }
}

(その3;自動プロパティで変更する)

<プレーヤーサイドのスクリプト>

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

public class BotController : MonoBehaviour
{
    public GameObject[] beamPrefabs;
    private int count;
    private int num = 0;

    // speedの変更(その3:自動プロパティで変更する)
    public int Speed { get; set; }

    private void Start()
    {
        Speed = 5;
    }

    void Update()
    {
        float moveH = Input.GetAxis("Horizontal") * Time.deltaTime * Speed;
        float moveV = Input.GetAxis("Vertical") * Time.deltaTime * Speed;
        transform.Translate(moveH, moveV, 0);
    }

    private void FixedUpdate()
    {
        if (Input.GetKeyDown(KeyCode.Z))
        {
            num = (num + 1) % beamPrefabs.Length;
        }

        if (Input.GetKey(KeyCode.Space))
        {
            count += 1;

            if (count % 10 == 0)
            {
                GameObject beam = Instantiate(beamPrefabs[num], transform.position, Quaternion.Euler(0, 0, 90));
                Rigidbody beamRb = beam.GetComponent<Rigidbody>();
                beamRb.AddForce(transform.right * 1000);
                Destroy(beam, 2.0f);
            }
        }
    }
}

<アイテムサイドのスクリプト>

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

public class SpeedUpItem : Item
{
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Beam"))
        {
            ItemBase(other.gameObject);

            // Botの移動速度を上げるその3(自動プロパティで変更する)
            GameObject.Find("MyBot").GetComponent<BotController>().Speed = 10;
        }
    }
}