【UnityC#講座】クリスマスミュージックをかける【AudioSource】

クリスマスBGM/トップ

Unity2019.2.2f1
Windows10

クリスマスBGM/トップ

今回はアセットストアで無料でダウンロードでいるクリスマスミュージックを流します。

Christmas Music – Loop Instrumental

スクリプトでループ、中断/再開、そしてシーンをまたいでも曲が続くようにします。
完成動画はこちら。

■クリスマスミュージックを流すスクリプト

曲をループさせるのはInspectorからAudioSourceコンポーネントのLoopにチェック入れるだけでできます。
AudioClipに曲を入れてください。
Play On Awakeにチェックを入れるとゲームを実行してすぐに曲が流れます。

クリスマスBGM/AudioSource

でもInspecotr上からではシーン遷移した際にBGMを流すオブジェクトが破棄されるのを防ぐことができないのでスクリプトを書きます。
ついでに右クリックで一時中断/再開、マウススクロールで音量変更できるようにしました。
あと動画では一時中断が分かりづらいだろうとTextが表示されるようにもします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//TextなどのUIを使うのに必要
using UnityEngine.UI;
//オブジェクトにAudioSourceコンポーネントを追加
[RequireComponent(typeof(AudioSource))]
public class BGM : MonoBehaviour
{
//AudioSourceコンポーネントを入れる変数
AudioSource audioSource;
//右クリックでオンオフ切り替えるための変数
public bool pause = true;
//音量をInspector上で表示するための変数
public float scroll = 0;
//Inspector上から「BGM中断」のTextのUIを入れる
public Text text;
void Start()
{
//AudioSourceコンポーネントを取得
audioSource = GetComponent<AudioSource>();
//曲を流す
audioSource.Play();
//曲をループさせる
audioSource.loop = true;
//曲の音量、0~1まで
audioSource.volume = 0.5f;
//このオブジェクトがシーン遷移しても
//破棄されないようにする
DontDestroyOnLoad(this.gameObject);
//Textを非表示にする
text.enabled = false;
}
void Update()
{
//右クリックで起動
if (Input.GetMouseButtonDown(1))
{
//右クリックごとにBool変数が切り替わる
if (pause) {
//曲を一時中断する
audioSource.Pause();
pause = false;
//Textを表示する
text.enabled = true;
}
else
{
//曲を再開する
audioSource.UnPause();
pause = true;
//Textを非表示にする
text.enabled = false;
}
}
//音量にマウススクロールの値を加える
audioSource.volume += Input.GetAxis("Mouse ScrollWheel");
//Inspector上に音量を表示する
scroll = audioSource.volume;
}
}
view raw 48.cs hosted with ❤ by GitHub

スポンサーリンク

■Scene遷移させる

新たなSceneを作り特定のオブジェクトに触れたらScene遷移するようにします。

新たなSceneを作る

File > New Scene

Save as…にすると現在のSceneを複製し新たな名前を付けることができます。

Sceneを登録する

Scene遷移は遷移先のSceneをScenes In Buildに登録していないとできません。

File > Build Settings

登録したいSceneでAdd Open Scenesのボタンを押すか、AssetsのSceneのアイコンをScenes In Buildへドラッグ&ドロップしてください。

クリスマスBGM/Scenes In Build

スクリプトを設定する

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//Scene遷移に必要
using UnityEngine.SceneManagement;
public class SceneMove : MonoBehaviour
{
//Inspector上で遷移先の名前を入れる
public string sceneName;
//Playerタグがついたオブジェクトに衝突するとSceneが遷移する
private void OnCollisionEnter(UnityEngine.Collision collision)
{
if (collision.gameObject.tag == "Player")
{
SceneManager.LoadScene(sceneName);
}
}
}
view raw 48a.cs hosted with ❤ by GitHub

遷移先のSceneの名前をInspector上から入力してください。
このスクリプトが入ったオブジェクトはPlayerタグのオブジェクトに衝突するとScene遷移します。
アタッチするオブジェクトはColliderがついてないといけませんし、衝突する方とされる方のどちらかにRigidbodyがセットされている必要があります。

クリスマスBGM/SceneMoveスクリプト/Scene先名称登録

■プレゼントボックス発射のスクリプト

これは必要ないと思いますがメモがてら紹介します。
移動のスクリプトは以前紹介したこの記事からです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PresentFire : MonoBehaviour
{
//発射したいオブジェクトを入れる
public GameObject present;
Rigidbody rb;
//発射したい位置に置いた空のオブジェクトを入れる
public GameObject shotPos;
void Update()
{
//左クリックで設定したオブジェクトを生成し発射
if (Input.GetMouseButtonDown(0))
{
//設定したオブジェクトを生成
GameObject copy = Instantiate(present, shotPos.transform.position,
Quaternion.identity);
//生成したオブジェクトのRigidbodyを取得
rb = copy.GetComponent<Rigidbody>();
//Rigidbodyに力を加えて飛ばす
rb.AddForce(transform.forward * 1000 + transform.up * 1000);
}
}
}
view raw 48b.cs hosted with ❤ by GitHub

クリスマスBGM/PresentFireスクリプト/Inspector

InspectorのPresentには生成したいオブジェクトを、ShotPosにはオブジェクトを生成したい位置に置いた空のオブジェクトを入れます。
空のオブジェクトは操作するオブジェクトの子オブジェクトにすれば一緒に移動します。

■使用したアセット

サンタ娘

クリスマスBGM/サンタ娘

Blender標準テクニックの子を改造して作りました。
Unity2018だと今までの髪のテクスチャが使えたのですが、2019に持ってきたら真っ黒になってしまい泣く泣く新たに色をつけた次第です。
Packageで素材の使い回しするのも楽じゃないなとがっくし。
Unity2018版のサンタ娘はこの記事で見れます。

他に使用したアセットはこちらです。

Minimalist Christmas

最初のクリスマスの部屋のアセットです。

Winter Forest – Low Poly Toon Battle Arena / Tower Defense Pack

雪が降るローポリのステージのアセットです。

■関連記事

【Blender、Unity】ハロウィンパレード2019の動画を作りました【C#】

【UnityC#講座】ユニティちゃんにボイスをつける【AudioSource】

【Blender、Unity】サンタ娘がトナカイ(?)に乗ってプレゼント爆弾を投げる【C#】

スポンサーリンク

目次に戻る