(2024年4月10日)
<修正>
・スケールチェンジに触れたら2倍になる。
・2倍大きさで敵に触れたら、1倍に戻る。
・3秒間は無敵
・3秒後に無敵解除。その後、敵に触れたらゲームーバーになる。
*「ScaleChange」スクリプトの改良
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScaleChange : MonoBehaviour
{
public Material mat;
// ★改良
// public Vector3 scale; // 使用しないので削除する。
public AudioClip ScaleChangeSound;
private void OnTriggerEnter(Collider other)
{
// ★改良
other.gameObject.transform.localScale = new Vector3(2, 2, 2); // 大きさは2倍にする。
other.GetComponent().isMuteki = true;
this.gameObject.GetComponent().isTrigger = false;
this.gameObject.GetComponent().material = mat;
AudioSource.PlayClipAtPoint(ScaleChangeSound, transform.position);
}
}
*「Ball1」スクリプトの改良
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class Ball1 : MonoBehaviour
{
public float moveSpeed;
private Rigidbody rb;
public AudioClip coinGet;
public Text countlabel;
public float jumpSpeed;
private bool isJumping = false;
private int coinCount = 3;
private Vector3 pos;
public GameObject[] coinIncons;
// ★改良
public bool isMuteki { get; set; }
//public bool isMuteki = false; // こちらは削除する。
void Start()
{
rb = GetComponent();
}
void Update()
{
countlabel.text = "�c��" + coinCount;
if (coinCount == 0)
{
SceneManager.LoadScene("Stage2");
}
//mutekizyoutainobaainiha3byougonikaizyosuru.
// ★削除
// if (isMuteki == true)
// {
// Invoke("MutekiReset", 3.0f);
// }
pos = transform.position;
if (pos.y < -25)
{
SceneManager.LoadScene("GameOver");
}
float moveH = Input.GetAxis("Horizontal");
float moveV = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveH, 0, moveV);
rb.AddForce(movement * moveSpeed);
if (Input.GetButtonDown("Jump") && isJumping == false)
{
rb.velocity += Vector3.up * jumpSpeed;
isJumping = true;
}
}
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Coin"))
{
Destroy(other.gameObject);
AudioSource.PlayClipAtPoint(coinGet, transform.position);
coinCount -= 1;
for (int i = 0; i < coinIncons.Length; i++)
{
if (coinCount <= i)
{
coinIncons[i].SetActive(true);
}
else
{
coinIncons[i].SetActive(false);
}
}
}
if (other.CompareTag("RedCoin"))
{
Destroy(other.gameObject);
AudioSource.PlayClipAtPoint(coinGet, transform.position);
coinCount -= 2;
for (int i = 0; i < coinIncons.Length; i++)
{
if (coinCount <= i)
{
coinIncons[i].SetActive(true);
}
else
{
coinIncons[i].SetActive(false);
}
}
}
if (other.CompareTag("BlueCoin"))
{
Destroy(other.gameObject);
AudioSource.PlayClipAtPoint(coinGet, transform.position);
coinCount -= 5;
}
if (other.CompareTag("BigCoin"))
{
Destroy(other.gameObject);
AudioSource.PlayClipAtPoint(coinGet, transform.position);
SceneManager.LoadScene("GameClear");
}
}
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Floor"))
{
isJumping = false;
}
}
// ★削除
// void MutekiReset()
// {
// isMuteki = false;
// }
}
*「Enemy」スクリプトの改良
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Enemy : MonoBehaviour
{
private GameObject ball;
// ★改良
// 下記2行を削除
//private float scale;
//public bool isMuteki = false;
public AudioClip DamegeSound;
private void OnCollisionEnter(Collision other)
{
if (other.gameObject.CompareTag("Player"))
{
ball = other.gameObject;
if (ball.GetComponent().isMuteki == true)
{
ball.transform.localScale = new Vector3(1, 1, 1);
Invoke("MutekiReset", 3);
AudioSource.PlayClipAtPoint(DamegeSound, transform.position);
}
else // ★改良
{
SceneManager.LoadScene("GameOver");
}
// ★↑上記のように変更
// if(ball.transform.localScale==new Vector3(1,1,1))
// {
// SceneManager.LoadScene("GameOver");
// }
}
}
void MutekiReset()
{
ball.GetComponent().isMuteki = false;
}
}
<シーン遷移時に画面が暗くなるの修正>
・「Title」シーンと「Stage1」シーンの「Lighting」の設定を変更する。
(2024年3月27日)
<溶岩の噴火>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Erupt : MonoBehaviour
{
public GameObject[] lavas;
public AudioClip sound;
void Start()
{
StartCoroutine(Volcano());
}
private IEnumerator Volcano()
{
yield return new WaitForSeconds(3f);
while (true)
{
for (int i = 0; i < 10; i++)
{
if (i == 0)
{
AudioSource.PlayClipAtPoint(sound, transform.position);
}
int num = Random.Range(0, lavas.Length);
GameObject lava = Instantiate(lavas[num], transform.position, Quaternion.identity);
Rigidbody lavaRb = lava.GetComponent<Rigidbody>();
lavaRb.AddForce(Vector3.up * 750);
yield return new WaitForSeconds(0.1f);
Destroy(lava, 10f);
}
yield return new WaitForSeconds(5f);
}
}
}
(2024年1月17日)
<スケールチェンジができるのは1回だけ>
*ScaleChangeスクリプトの改良
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScaleChange : MonoBehaviour
{
// ★追加(スケールチェンジ1回で終了)
public Material mat;
private void OnTriggerEnter(Collider other)
{
other.gameObject.transform.localScale = new Vector3(2, 2, 2);
other.GetComponent().isMuteki = true;
// ★追加(スケールチェンジ1回で終了)
// IS Triggerをオフにする・・・>OnTriggerEnterが作動しなくなる。
this.gameObject.GetComponent<BoxCollider>().isTrigger = false;
// マテリアルをチェンジする・・・>見た目のデザインが変化する。
this.gameObject.GetComponent<MeshRenderer>().material = mat;
}
}
(2023年1月10日)
<3秒間無敵>
1)Ballスクリプトの改良
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball : MonoBehaviour
{
public float speed;
private Rigidbody rb;
// ★追加(無敵)
public bool isMuteki { get; set; }
void Start()
{
rb = GetComponent<Rigidbody>();
// ★追加(無敵)
isMuteki = false;
}
void Update()
{
float moveH = Input.GetAxis("Horizontal");
float moveV = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveH, 0, moveV);
rb.AddForce(movement * speed);
}
}
2)スケールチェンジスクリプトの改良
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScaleChange : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
other.gameObject.transform.localScale = new Vector3(2, 2, 2);
// ★追加(無敵)
// Ballを無敵状態にする。
other.GetComponent<Ball>().isMuteki = true;
}
}
3)エネミースクリプトの改良
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
// ★改良(無敵)
public class EnemyX : MonoBehaviour
{
private GameObject ball;
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Player"))
{
ball = collision.gameObject;
// もしぶつかった時、Ballが無敵状態の場合には
if(ball.GetComponent<Ball>().isMuteki == true)
{
// サイズを1に戻す
ball.transform.localScale = new Vector3(1, 1, 1);
// 3秒後に無敵状態を終了させる
Invoke("MutekiReset", 3.0f);
}
else // Ballが無敵ではない場合には
{
// ゲームオーバーにする。
SceneManager.LoadScene("GameOver");
}
}
}
void MutekiReset()
{
ball.GetComponent<Ball>().isMuteki = false;
}
}