クエスチョンブロックを叩いた時のアニメーションと効果音追加
広告
了解しました!では、ブロックが叩かれたときに効果音を再生する機能を追加します。
改良版 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など) を設定