基於Unity3D的2d拾寶遊戲(四)
阿新 • • 發佈:2019-01-02
磚石(星星)控制類gemController的主要行為:
- 磚石(星星)與玩家碰撞檢測
- 吃到磚石(星星)時聲音處理
- 吃到磚石(星星)聲音控制
- 磚石(星星)上下移動控制
磚石(星星)控制類gemController類程式碼:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//磚石控制類
public class gemController : MonoBehaviour {
public float speed;
public AudioClip soundName;
AudioSource au;
private float startPos;
private bool isDown;
// Use this for initialization
void Start () {
speed = 0.002f;
isDown = true;
startPos = transform.position.y;
au = GetComponent<AudioSource>();
}
// Update is called once per frame
void Update () {
if (isDown)
{
transform.Translate(Vector3.down * speed);
}
else
{
transform.Translate(Vector3.up * speed);
}
if ((transform.position.y - startPos) > 0)
isDown = true;
if ((transform.position.y - startPos) < -0.40 f)
isDown = false;
}
//播放聲音
void playSound(AudioClip audioc)
{
if (!au.isPlaying)
{
au=PlayClipAtPoint(audioc, new Vector3(0,0,-15), 5f);
}
}
//吃到磚石時聲音處理
public AudioSource PlayClipAtPoint(AudioClip clip, Vector3 position, float volume )
{
GameObject gameObject = new GameObject("One shot audio");
gameObject.transform.position = position;
AudioSource audioSource = (AudioSource)gameObject.AddComponent(typeof(AudioSource));
audioSource.clip = clip;
audioSource.spatialBlend = 1f;
audioSource.volume = volume;
audioSource.Play();
Object.Destroy(gameObject, clip.length * ((Time.timeScale >= 0.01f) ? Time.timeScale : 0.01f));
return audioSource;
}
//磚石與玩家碰撞檢測
void OnTriggerEnter(Collider collider)
{
if (collider.tag == "Player")
{
playSound(soundName);
Destroy(gameObject);
}
}
}