敵の攻撃を停止させるアイテムの作成
![0cc64245 b7b1 48d7 8b23 dc8c32bd8b0d](https://codegenius.org/uploads/slide/image/7099/0cc64245-b7b1-48d7-8b23-dc8c32bd8b0d.jpeg)
![013eab6e f8f1 43ad 9ee4 7efb8b76c110](https://codegenius.org/uploads/slide/image/7100/013eab6e-f8f1-43ad-9ee4-7efb8b76c110.jpeg)
![5b0c1ddc 3bed 440d bbc5 0221eec73323](https://codegenius.org/uploads/slide/image/7101/5b0c1ddc-3bed-440d-bbc5-0221eec73323.jpeg)
敵の攻撃の停止
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyShotShell : MonoBehaviour
{
public float shotSpeed;
public GameObject enemyShellPrefab;
public AudioClip shotSound;
private int count;
// ★追加
private float stopTimer = 5.0f; // 何秒間停止させるかは自由
private void Update()
{
count += 1;
// ★追加
stopTimer -= Time.deltaTime;
// ★追加
// ここの意味を考えてみよう。
if(stopTimer < 0)
{
stopTimer = 0;
}
// ★条件の追加
if(count % 100 == 0 && stopTimer <= 0)
{
GameObject enemyShell = Instantiate(enemyShellPrefab, transform.position, Quaternion.identity);
Rigidbody enemyShellRb = enemyShell.GetComponent<Rigidbody>();
enemyShellRb.AddForce(transform.forward * shotSpeed);
AudioSource.PlayClipAtPoint(shotSound, transform.position);
Destroy(enemyShell, 3.0f);
}
}
// ★追加
// 敵の攻撃を停止させるメソッド
// (復習)このメソッドは外部からアクセスできるように「public」をつける(重要)
// (復習)このメソッドをStopAttackItemスクリプトから呼び出す。
public void AddStopTimer(float amount)
{
stopTimer += amount;
}
}
![80f4ef0c c19c 422b b5e6 3957189b934a](https://codegenius.org/uploads/slide/image/7102/80f4ef0c-c19c-422b-b5e6-3957189b934a.jpeg)
敵の攻撃の停止(アイテム)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StopAttackItem : MonoBehaviour
{
// 「配列」(プログラミング・ポイント)
private GameObject[] targets;
public AudioClip getSound;
public GameObject effectPrefab;
private void OnTriggerEnter(Collider other)
{
if(other.CompareTag("Player"))
{
// 「EnemyShotShell」オブジェクトに「EnemyShotShell」タグを設定してください(ポイント)
targets = GameObject.FindGameObjectsWithTag("EnemyShotShell");
// 「繰り返し文」(プログラミング・ポイント)
// 「foreach」の使い方を学習しよう。
foreach(GameObject t in targets)
{
// 攻撃停止時間を「3秒」加算する(自由に変更可能)
t.GetComponent<EnemyShotShell>().AddStopTimer(3.0f);
}
Destroy(gameObject);
AudioSource.PlayClipAtPoint(getSound, transform.position);
GameObject effect = Instantiate(effectPrefab, transform.position, Quaternion.identity);
Destroy(effect, 0.5f);
}
}
}
![618917d5 e1bf 4592 8496 80d7aa2e4535](https://codegenius.org/uploads/slide/image/7103/618917d5-e1bf-4592-8496-80d7aa2e4535.jpeg)
![Dc0f9a77 b2da 461f 83f4 e0c26eb6ac19](https://codegenius.org/uploads/slide/image/7104/dc0f9a77-b2da-461f-83f4-e0c26eb6ac19.jpeg)
![115aba7a 8d6f 4dbb 9c29 55a5bcbaeeb2](https://codegenius.org/uploads/slide/image/7105/115aba7a-8d6f-4dbb-9c29-55a5bcbaeeb2.jpeg)
【2021版】BattleTank(基礎/全33回)
他のコースを見る![0cc64245 b7b1 48d7 8b23 dc8c32bd8b0d](https://codegenius.org/uploads/slide/image/7099/0cc64245-b7b1-48d7-8b23-dc8c32bd8b0d.jpeg)
![013eab6e f8f1 43ad 9ee4 7efb8b76c110](https://codegenius.org/uploads/slide/image/7100/013eab6e-f8f1-43ad-9ee4-7efb8b76c110.jpeg)
![5b0c1ddc 3bed 440d bbc5 0221eec73323](https://codegenius.org/uploads/slide/image/7101/5b0c1ddc-3bed-440d-bbc5-0221eec73323.jpeg)
敵の攻撃の停止
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyShotShell : MonoBehaviour
{
public float shotSpeed;
public GameObject enemyShellPrefab;
public AudioClip shotSound;
private int count;
// ★追加
private float stopTimer = 5.0f; // 何秒間停止させるかは自由
private void Update()
{
count += 1;
// ★追加
stopTimer -= Time.deltaTime;
// ★追加
// ここの意味を考えてみよう。
if(stopTimer < 0)
{
stopTimer = 0;
}
// ★条件の追加
if(count % 100 == 0 && stopTimer <= 0)
{
GameObject enemyShell = Instantiate(enemyShellPrefab, transform.position, Quaternion.identity);
Rigidbody enemyShellRb = enemyShell.GetComponent<Rigidbody>();
enemyShellRb.AddForce(transform.forward * shotSpeed);
AudioSource.PlayClipAtPoint(shotSound, transform.position);
Destroy(enemyShell, 3.0f);
}
}
// ★追加
// 敵の攻撃を停止させるメソッド
// (復習)このメソッドは外部からアクセスできるように「public」をつける(重要)
// (復習)このメソッドをStopAttackItemスクリプトから呼び出す。
public void AddStopTimer(float amount)
{
stopTimer += amount;
}
}
![80f4ef0c c19c 422b b5e6 3957189b934a](https://codegenius.org/uploads/slide/image/7102/80f4ef0c-c19c-422b-b5e6-3957189b934a.jpeg)
敵の攻撃の停止(アイテム)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StopAttackItem : MonoBehaviour
{
// 「配列」(プログラミング・ポイント)
private GameObject[] targets;
public AudioClip getSound;
public GameObject effectPrefab;
private void OnTriggerEnter(Collider other)
{
if(other.CompareTag("Player"))
{
// 「EnemyShotShell」オブジェクトに「EnemyShotShell」タグを設定してください(ポイント)
targets = GameObject.FindGameObjectsWithTag("EnemyShotShell");
// 「繰り返し文」(プログラミング・ポイント)
// 「foreach」の使い方を学習しよう。
foreach(GameObject t in targets)
{
// 攻撃停止時間を「3秒」加算する(自由に変更可能)
t.GetComponent<EnemyShotShell>().AddStopTimer(3.0f);
}
Destroy(gameObject);
AudioSource.PlayClipAtPoint(getSound, transform.position);
GameObject effect = Instantiate(effectPrefab, transform.position, Quaternion.identity);
Destroy(effect, 0.5f);
}
}
}
![618917d5 e1bf 4592 8496 80d7aa2e4535](https://codegenius.org/uploads/slide/image/7103/618917d5-e1bf-4592-8496-80d7aa2e4535.jpeg)
![Dc0f9a77 b2da 461f 83f4 e0c26eb6ac19](https://codegenius.org/uploads/slide/image/7104/dc0f9a77-b2da-461f-83f4-e0c26eb6ac19.jpeg)
![115aba7a 8d6f 4dbb 9c29 55a5bcbaeeb2](https://codegenius.org/uploads/slide/image/7105/115aba7a-8d6f-4dbb-9c29-55a5bcbaeeb2.jpeg)
敵の攻撃を停止させるアイテムの作成