★Dan Muramatu

(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;
    }
}