(前提)
・スピードアップアイテムを獲得すると、プレーヤーの移動速度が増加する。
(その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;
}
}
}