1. 程式人生 > >基於Unity3D的2d拾寶遊戲(四)

基於Unity3D的2d拾寶遊戲(四)

磚石(星星)控制類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); } } }