ChatGPTUnityC#Blender

Unity・C#・Blender

クエスチョンブロックを叩いた時のアニメーションと効果音追加

広告

了解しました!では、ブロックが叩かれたときに効果音を再生する機能を追加します。

 

改良版 QuestionBlock.cs(効果音追加)

 

using UnityEngine;

using System.Collections;


public class QuestionBlock : MonoBehaviour

{

    public GameObject itemPrefab;               // 出現させるアイテム(例:コイン)

    public Sprite usedSprite;                   // 使い終わった見た目用スプライト

    public AudioClip hitSound;                  // ブロックを叩いたときの音

 


    private bool used = false;

    private Vector3 originalPosition;

    private bool isAnimating = false;

 


    private SpriteRenderer spriteRenderer;

    private AudioSource audioSource;

 


    void Start()

    {

        originalPosition = transform.position;

        spriteRenderer = GetComponent<SpriteRenderer>();

        audioSource = GetComponent<AudioSource>();

 


        // AudioSourceがなければ自動追加(保険)

        if (audioSource == null)

        {

            audioSource = gameObject.AddComponent<AudioSource>();

        }

    }

 


    void OnCollisionEnter2D(Collision2D collision)

    {

        if (used || isAnimating) return;

 


        foreach (ContactPoint2D contact in collision.contacts)

        {

            if (contact.normal.y < -0.5f && collision.gameObject.CompareTag("Player"))

            {

                used = true;

                StartCoroutine(AnimateBlock());

                SpawnItem();

                ChangeToUsedSprite();

                PlayHitSound(); // ← 効果音を再生

            }

        }

    }

 


    void SpawnItem()

    {

        Instantiate(itemPrefab, transform.position + Vector3.up, Quaternion.identity);

    }

 


    void ChangeToUsedSprite()

    {

        if (usedSprite != null && spriteRenderer != null)

        {

            spriteRenderer.sprite = usedSprite;

        }

    }

 


    void PlayHitSound()

    {

        if (hitSound != null && audioSource != null)

        {

            audioSource.PlayOneShot(hitSound);

        }

    }

 


    System.Collections.IEnumerator AnimateBlock()

    {

        isAnimating = true;

 


        float moveAmount = 0.2f;

        float moveSpeed = 0.05f;

 


        transform.position = originalPosition + Vector3.up * moveAmount;

        yield return new WaitForSeconds(moveSpeed);

 


        transform.position = originalPosition;

        yield return new WaitForSeconds(moveSpeed);

 


        isAnimating = false;

    }

}

 

Unityエディタでの設定手順:

QuestionBlock オブジェクトを選択
AudioSource コンポーネントを追加(自動追加されるので省略可)
hitSound に「ブロックを叩く音」(block_hit.wavなど) を設定