敵を移動させる
敵を移動させる
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyMove : MonoBehaviour
{
[Range(0, 10)] // Rangeは範囲を決める属性
public float moveDistance;
void Update()
{
// (ポイント)
// 「Space.World」を設定すると「ワールド座標」が基準になる
// 書かない場にはオブジェクトの座標が基準になる。
// オブジェクトを基準にした場合、それが回転するとまっすぐに移動しなくなるので注意
transform.Translate(0, 0, -moveDistance * Time.deltaTime, Space.World);
}
}
敵を破壊する(基本形)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyHealth2 : MonoBehaviour
{
public GameObject effectPrefab;
public AudioClip destroySound;
// ここでは敵の破壊の「基本形」を紹介しています。
// ここからさらに「発展形」を考えてみましょう。
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Missile"))
{
AudioSource.PlayClipAtPoint(destroySound, transform.position);
GameObject effect = Instantiate(effectPrefab, transform.position, Quaternion.identity);
Destroy(effect, 0.5f);
Destroy(gameObject);
Destroy(other.gameObject);
}
}
}
画面外に出た敵を破壊する
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DestroyEnemy : MonoBehaviour
{
// (ポイント)
// ①「Is Trigger」にチェックを入れるのを忘れないように。
// ②EnemyCに「Enemy」のタグを付けること。
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Enemy")
{
Destroy(other.gameObject);
}
}
}
条件を追加する
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class PlayerHealth : MonoBehaviour
{
public GameObject effectPrefab;
public AudioClip damageSound;
public AudioClip destroySound;
public int playerHP;
private Slider playerHPSlider;
public GameObject[] playerIcons;
public static int destroyCount = 0;
public bool isMuteki = false;
private ScoreManager scoreManager;
void Start()
{
scoreManager = GameObject.Find("ScoreLabel").GetComponent<ScoreManager>();
UpdatePlayerIcons();
playerHPSlider = GameObject.Find("PlayerHPSlider").GetComponent<Slider>();
playerHPSlider.maxValue = playerHP;
playerHPSlider.value = playerHP;
}
// ★(条件文を追加)
// 『|| other.gameObject.CompareTag("Enemy") && isMuteki == false』を条件に追加しましょう。
// ||は「または」の意味(条件Aまたは条件Bのどちらかが成立したとき)
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("EnemyMissile") && isMuteki == false || other.gameObject.CompareTag("Enemy") && isMuteki == false)
{
playerHP -= 1;
AudioSource.PlayClipAtPoint(damageSound, Camera.main.transform.position);
playerHPSlider.value = playerHP;
Destroy(other.gameObject);
if (playerHP == 0)
{
destroyCount += 1;
UpdatePlayerIcons();
GameObject effect = Instantiate(effectPrefab, transform.position, Quaternion.identity);
Destroy(effect, 1.0f);
AudioSource.PlayClipAtPoint(destroySound, Camera.main.transform.position);
this.gameObject.SetActive(false);
if (destroyCount < 5)
{
Invoke("Retry", 1.0f);
}
else
{
destroyCount = 0;
scoreManager.ScoreReset();
SceneManager.LoadScene("GameOver");
}
}
}
}
void UpdatePlayerIcons()
{
for (int i = 0; i < playerIcons.Length; i++)
{
if (destroyCount <= i)
{
playerIcons[i].SetActive(true);
}
else
{
playerIcons[i].SetActive(false);
}
}
}
void Retry()
{
this.gameObject.SetActive(true);
playerHP = 5;
playerHPSlider.value = playerHP;
isMuteki = true;
Invoke("MutekiOff", 2.0f);
}
void MutekiOff()
{
isMuteki = false;
}
public void AddHP(int amount)
{
playerHP += amount;
if (playerHP > 5)
{
playerHP = 5;
}
playerHPSlider.value = playerHP;
}
public void Player1Up(int amount)
{
destroyCount -= amount;
if (destroyCount < 0)
{
destroyCount = 0;
}
UpdatePlayerIcons();
}
}
敵を移動させる
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyMove : MonoBehaviour
{
[Range(0, 10)] // Rangeは範囲を決める属性
public float moveDistance;
void Update()
{
// (ポイント)
// 「Space.World」を設定すると「ワールド座標」が基準になる
// 書かない場にはオブジェクトの座標が基準になる。
// オブジェクトを基準にした場合、それが回転するとまっすぐに移動しなくなるので注意
transform.Translate(0, 0, -moveDistance * Time.deltaTime, Space.World);
}
}
敵を破壊する(基本形)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyHealth2 : MonoBehaviour
{
public GameObject effectPrefab;
public AudioClip destroySound;
// ここでは敵の破壊の「基本形」を紹介しています。
// ここからさらに「発展形」を考えてみましょう。
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Missile"))
{
AudioSource.PlayClipAtPoint(destroySound, transform.position);
GameObject effect = Instantiate(effectPrefab, transform.position, Quaternion.identity);
Destroy(effect, 0.5f);
Destroy(gameObject);
Destroy(other.gameObject);
}
}
}
画面外に出た敵を破壊する
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DestroyEnemy : MonoBehaviour
{
// (ポイント)
// ①「Is Trigger」にチェックを入れるのを忘れないように。
// ②EnemyCに「Enemy」のタグを付けること。
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Enemy")
{
Destroy(other.gameObject);
}
}
}
条件を追加する
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class PlayerHealth : MonoBehaviour
{
public GameObject effectPrefab;
public AudioClip damageSound;
public AudioClip destroySound;
public int playerHP;
private Slider playerHPSlider;
public GameObject[] playerIcons;
public static int destroyCount = 0;
public bool isMuteki = false;
private ScoreManager scoreManager;
void Start()
{
scoreManager = GameObject.Find("ScoreLabel").GetComponent<ScoreManager>();
UpdatePlayerIcons();
playerHPSlider = GameObject.Find("PlayerHPSlider").GetComponent<Slider>();
playerHPSlider.maxValue = playerHP;
playerHPSlider.value = playerHP;
}
// ★(条件文を追加)
// 『|| other.gameObject.CompareTag("Enemy") && isMuteki == false』を条件に追加しましょう。
// ||は「または」の意味(条件Aまたは条件Bのどちらかが成立したとき)
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("EnemyMissile") && isMuteki == false || other.gameObject.CompareTag("Enemy") && isMuteki == false)
{
playerHP -= 1;
AudioSource.PlayClipAtPoint(damageSound, Camera.main.transform.position);
playerHPSlider.value = playerHP;
Destroy(other.gameObject);
if (playerHP == 0)
{
destroyCount += 1;
UpdatePlayerIcons();
GameObject effect = Instantiate(effectPrefab, transform.position, Quaternion.identity);
Destroy(effect, 1.0f);
AudioSource.PlayClipAtPoint(destroySound, Camera.main.transform.position);
this.gameObject.SetActive(false);
if (destroyCount < 5)
{
Invoke("Retry", 1.0f);
}
else
{
destroyCount = 0;
scoreManager.ScoreReset();
SceneManager.LoadScene("GameOver");
}
}
}
}
void UpdatePlayerIcons()
{
for (int i = 0; i < playerIcons.Length; i++)
{
if (destroyCount <= i)
{
playerIcons[i].SetActive(true);
}
else
{
playerIcons[i].SetActive(false);
}
}
}
void Retry()
{
this.gameObject.SetActive(true);
playerHP = 5;
playerHPSlider.value = playerHP;
isMuteki = true;
Invoke("MutekiOff", 2.0f);
}
void MutekiOff()
{
isMuteki = false;
}
public void AddHP(int amount)
{
playerHP += amount;
if (playerHP > 5)
{
playerHP = 5;
}
playerHPSlider.value = playerHP;
}
public void Player1Up(int amount)
{
destroyCount -= amount;
if (destroyCount < 0)
{
destroyCount = 0;
}
UpdatePlayerIcons();
}
}
敵を移動させる