Unityゲーム開発者アイデルンのBlog

よかったら読んでいってね

【Unity】スライダーの使い方

スライダーは使用頻度が結構高いUIです。

 

例えばHPバーの表示やサウンドマネージャーなどのつまみをつまんで動かすことが想定されますが簡単な設定だけで使えるようになります。

 

今回ご紹介するのはスクリプトからどう動かせばいいのか一例を書きますね。

 

最小、最大、現在の値の設定

using UnityEngine.UI;

これでUIを使えるように設定してください。

public Slider slider;

これで対象のスライダーを設定してください。

 

これで準備完了しましたが実際に値を設定するときは

slider.Value:現在の数値

slider.MinValue:最小の数値

slider.MaxValue:最大の数値

主にこの数字をいじることになります。

 

なにも追記しないならインスペクター上での設定になるのでスクリプトから指定するなら上記のものを記述することになります。

 

例えばHPバーを表現したいのなら最大数値と現在の数値をいじればいいので

slider.MaxValue=100;

slider.Value=50;

このような設定をするだけでいいです。

 

あとはValueの数字をHPと連動させるだけで簡単にHPバーが表現できるようになります。

 

もしHPバーを表現するのならハンドルを削除しFill Rectの数字を全て0にして隙間が空かないように設定してください。

デフォルトのままだとハンドルがある前提が初期設定になっているので隙間が出来てしまって不自然になります。

 

他にもバックグラウンドの色をいじって配色を決め敵のHPやら表現してみてください。

 

他にもボタンなどに使うOn Value Changedを使うとより細かい設定ができ、音の管理などを利用することもできます。

 

オーディオソースと連動させるなどで表現できるのでぜひとも調べてみてください。

 

まとめ

Sliderを利用すると見栄えが良くなり表現の幅を広げられるので積極的に使っていきましょう。

 

参考URL:

docs.unity3d.com

【Unity】シーンをまたいで値を保持する方法

ゲームを作っていて値を保持する方法に悩んだことがありませんでしょうか。

 

以前ご紹介したUnity標準で搭載しているPlayerPrefsを使ったセーブとロードをして値を保持してもいいのですがそれだといちいち書くのがめんどくさい。

 

今回ご紹介するものはstatic化しこのスクリプトは一つしかない状態にする方法となります。

 

 

Static化のメリット

Static化することでそのコードを読みやすくすることができるようになります。

 

またinstance化することでどこの状態からも読みやすくすることもできるようになります。

 

これをやるといちいち対象のスクリプトを代入してきて読み込ませる手間が省けることができます。

 

具体的なコードは

 

public stativ クラスコードの名前 instance;

 

if(instance==null)

{

instance=this;

DontLoadDestroy(this.gameobject);

}

else

{

Destroy(this.gameObject);

}

 

というコードになります。

 

解説

instanceが空の時にこのゲームオブジェクトが保持されて、また既にこのゲームオブジェクトが存在していたら重複しないように消えるという命令をやっています。

 

重複してしまうと仕様上どちらも存在してしまうのでどちらを参照するデータになるのかわからなくなる対策案になります。

 

よくわからなければそのままコピペしてご利用ください。

 

Static化のデメリット

 

1.どこからも呼び出せるのですがいちいち参照するときにコードが長くなってしまうデメリットがあります。

 

2.いちいちこのゲームオブジェクトの値を参照するのでデバックがやりずらい

 

正直のこの二つしか思いつかないので特に問題と感じなければガンガン使っていきましょう。

 

 

まとめ

 

ゲームオブジェクトのStatic化にはメリットデメリット両方存在するけどそれに見合うだけのメリットがあるので積極的に使っていこう。

 

また今回のコードでの使い方は

 

Static化したスクリプトの名前.instance.その中の値

 

という表記になります。

 

例:

 

Static化したスクリプトの表記方法。

public static TextScript instance;

public int testInt=0;

 

以下は別のスクリプトでの表記方法。

void Start()

{

  TextScript.instance.testInt=1;

}

 

この例だとStatic化したtestIntの値が1に変更されシーンをまたいでも保持されるようになります。

 

ゲーム作りが捗るようになるので使ってみてくださいね。

【Unity】スクリプトからオーディオソースを操作する方法

前回はノーコードでオーディオソースの仕様を解説しましたがそれだと自由度がないので実践ではスクリプトから操作することになります。

 

例えばゲーム開始したときに音楽を鳴らしたいときやゲームをクリアしたいときやアイテムをとったときに鳴らしたいとかいろんな場面が想定されます。

 

今回は具体的にどういう記述をすればいいのか一例をご紹介します。

 

1.オーディオソースを使えるようにする

 

オーディオソースを使うにはもうわかっていると思いますが宣言する必要があります。

 

AudioSource audioSource;

 

ゲットコンポーネントやpublicなどで直接代入することを忘れずにやりましょう。

 

2.クリップを設定する

クリップを指定するときも宣言する必要があります。

 

AudioClip audioclip;

 

こちらも同じく使いたい音の設定を忘れないようにしましょう。

 

3.音楽を代入する

音を代入したいときはこのようなコードを書きます。

 

audioSource.clip=audioclip;

 

4.音楽を鳴らす

代入し終えたら最後に鳴らすコードを記述します。

 

audioSource.Play();

 

Play();を使わなければ代入したものの再生することができないので忘れずにやりましょう。

 

これが一連の流れとなります。

 

5.音を一度だけ鳴らす

次に一度だけ音を鳴らす例を書きます。

 

音を変更し流すコードとほとんど変わりませんので省略します。

 

audioSource.PlayOneShot(audioclip);

 

Play();のところをPlayOneShot();というものにしただけで簡単にならすことができます。

 

 

以上が音を鳴らす工程になります。

 

慣れたらすぐ記述できるようになるので一連の流れを覚えておいてください。

 

一時停止、再開をやる方法

あまり使わないかもしれないですがもし広告を流したいときに音が重複してしまう場合があります。

 

たまにその設定を忘れてカオスみたいなことになるのでこちらも覚えておきましょう。

 

1.音楽を一時停止する

audioSource.Pauce();

 

音楽を一時停止させます。

 

2.音楽を再開する

audioSource.UnPauce();

 

一時停止状態を解除します。

 

3.音楽を停止する

audioSource.Stop();

 

音楽を完全に停止させます。

 

以上がよく使うメソッドのご紹介でした。

 

まとめ

音の管理はゲームを盛り上げるためには絶対に必要なものなので上記のものは忘れずに覚えておきましょう。

 

他にも慣れたらより細かく設定できるようになるのでこだわりだすと時間が溶けていくのでまずは簡単なものから学び始めましょう。

 

参考文献

docs.unity3d.com

UnityRoomにて新しいゲームを投稿しました

unityroom.com

 

毎月恒例のUnityRoomでゲームの投稿をしました。

 

今年最後のPCで遊べる無料ゲームが縦アクションゲームになります。

 

ロックマンX風を作製していましたが途中で力尽きてこんな形になりました。

 

もっと力を入れるべきですがとりあえず形だけでも作れればそれでいいかなって思った次第でございます。

 

パワーアップアイテムの多様化や敵の行動パターンなど作りこむとなるとどうしても膨大な作業となり自分一人の力では限界が来るので出来る範囲しかできませんからね。

 

もしよろしければ遊んでみてください。日々の励みとなります。

 

オーディオソースの使い方

オーディオソースとはオーディオリスナーとセットで使うものでありオーディオリスナーはメインカメラに最初からアタッチされています。

 

オーディオリスナーがなければ音の感知がされないのでUnityが気を利かせて最初から付けてくれているんですよね。

 

オーディオソースとは

簡単に言ってしまえば音楽をどのように流すのか指定するコンポーネントです。

 

当然設定しなければ音は流れないので無音空間になります。

 

スクリプトからシーンに合わせて代入する使い方が一般的ですがスクリプトを使わなくとも最初から設定することが可能であります。

 

 

設定項目の説明

Audio Clip:流す音楽

 

Output:設定しなくてもいいです。でもオーディオミキサーと連携すればより高度なことができるようになります。

 

Mute:音を一時的に消します。バックグラウンドでは流れているのでつけるとそこから音が流れるようになります。

 

Bypass Effects:チェックを入れるとバイパスエフェクトになります。特に理由がなければデフォルトのままでいいです。

 

Bypass Listener Effects:チェックを入れるとバイパスリスナーになります。特に理由がなければデフォルトのままでいいです。

 

Bypass Reverb Zones:チェックを入れるとReverb Zonesになります。特に理由がなければデフォルトのままでいいです。

 

Play On Awake:チェックを入れると音を一回鳴らします。シーンをまたぐたびに音が鳴ります。

 

Loop:音をループさせます。

 

Priority:音の優先度を設定をします。数が少なければ優先度が高くなり音の重複を防ぐことができます。

 

Volume:音の大きさ設定。

 

Pitch:音の速さ設定。

 

Stereo Pan:2Dにするとどこでも音が聞こえ、3Dにすると強弱が自動的に変更されます。

 

Spatial Blend:3D エンジンがオーディオソースに影響を与える度合いを設定します。理由がなければデフォのままでいいです。

 

Reverb Zone Mix:バーブゾーンにルーティングされる出力信号の量を設定します。理由がなければデフォのままでいいです。

 

3D Sound Settings:以下の項目も特に理由がなければデフォルトのままでいいです。

 

 

まとめ

オーディオソースはいろいろと設定があるけれどほとんど使うものは

 

Audio Clip、Output、Mute、Play On Awake、Loop、Priority、Volume、Pitch、Stereo Pan

ぐらいしかないので難しく考えなくても大丈夫。

 

オーディオソースをスクリプトから動かすこともそれほど難しくありません。

 

基本的なことをマスター出来たらあとはその応用ばかりなのでがんばっていきましょう。

 

整列のやり方

手動で整列するにもいちいち設定するのが面倒な人に朗報。

 

コンポーネント追加するだけで簡単に整列することができます。

 

『水平レイアウトグループ』『垂直レイアウトグループ』『グリッドレイアウトグループ』の3つが対象となります。

 

水平レイアウトグループはX軸に、垂直レイアウトグループはY軸、グリッドレイアウトグループはそのどちらも整列をすることができます。

 

実際に使うと簡単な設定で物体同士の間隔を設定することができるので大量のオブジェクト配置したのはいいものの手動で設定するのは面倒となるので積極的に使っていきましょう。

 

具体的な説明

『水平、垂直レイアウトグループ』

 

バディング:上下左右の間隔の設定

 

間隔:オブジェクト同士の感覚の設定

 

子を整列:どこから始点にするかの設定

 

逆配置:順番を逆にする

 

子のサイズの制御:レイアウトグループを設定したオブジェクトを基準にして子をどうするのか制御する設定

 

子のスケールを使用:レイアウトグループを設定したオブジェクトを基準にして子のサイズをどうするのか制御する設定

 

子を強制的に拡大:レイアウトグループを設定したオブジェクトを基準にして子を拡大するのか制御する設定

 

 

『グリッドレイアウトグループ』

 

セルサイズ:子を一括でサイズ変更をするX、Y軸対象

 

間隔:子を一括で間隔をあけるX、Y軸対象

 

開始する角:始点の設定

 

開始する軸:どちら方向に伸ばすかの設定

 

子の整列:子をどこ基準で整列するか設定

 

制約:一番上は無制限、他の設定はいくつで折り返しするのかを設定する

 

たとえば4と入力したら4つごとに折り返して配置される。

 

まとめ

 

実際にやるとすぐ理解できると思うのでまずは試して覚えてしまいましょう。

 

コンポーネントの名前さえ頭の片隅にあればわりとどうにかなります。

 

TextMeshProの使い方

TextMeshProとはもとはアセットだったものがUnityが買い入れ標準装備になったアセットです。

 

最新バージョンのLSTなら標準装備で入っているのでそのまま使用する準備だけで簡単に利用が出来ます。

 

では標準のTextとでは何が違うのかと言うとマテリアルが使えるようになることです。

 

Textではアウトラインの追加やより綺麗にするためのことはできないのですがTextMeshProを使えば簡単に実装が出来るようになります。

 

私もつい最近使い始めたのですがこれまた便利ですね。

 

今までGIMPで編集してたのですがこれからは直撮りそのままでも出せちゃうかもしれませんね。

 

本題

 

それでは本題になります。

 

デフォルト状態のTextMeshProでは当たり前ですが日本語対応していません。

 

なので自分でフォントを落としてきて自分で使えるようにする必要があります。

 

フォントは商用可能やらのフリー素材がそこら中にあるのでまずは好きなものをダウンロードしてください。

 

次に

 

次に落としてきたフォントをTextMeshPro対応にすることをやります。

 

UnityのWindow→TextMeshPro→FontAssetCreater

 

の順番に開いていってください。

 

そうするとウィンドウ画面が出てくるので一番上のSource Font Fileを先ほど落としてきたフォントを設定。

 

AtlasResolutonを両方一番下の8192を選択。

 

Character SetをCustom Charactersを選択。

 

Custom Character Listというものが出てきます。

 

日本語文字コード範囲指定(ascii・ひらがな・カタカナ・第一水準および第二水準(JIS-X0208-1997)に含まれる漢字) · GitHub

 

のページにとび日本語コードを右側にあるDownLoadZipを押してダウンロードしてきてください。

 

ダウンロードしたものを解凍し適当な場所に保存したら中身を開きすべてコピーしたら先ほど作ったCustom Character Listへペーストをしぶち込んでください。

 

そしたらGenerate Font Atlasを押してしばらくしたらTextMeshPro対応した専用のフォントが完成。

 

問題がなければそのままSAVEを押して終了です。

 

最後にTextMeshProテキストに先ほど作ったフォントを設定したら準備完了が終わりました。

 

今後も同じ工程でお好きなフォントを作ることができるようになりました。

 

 

TextMeshProの出来ること

 

では標準装備のTextでは出来なかったマテリアルの説明をします。

 

細かい設定は実際に手で動かして覚えたほうが早いので割愛。

 

メインとなるのはマテリアル項目になります。

 

テクスチャーを設定したりアウトラインを簡単に設定することができます。

 

Face

Color:文字の中の色を変える

SoftNess:0のままでいい

Dilate:0のままでいい

 

OutLine

color:アウトラインの色を変える

Thickness:アウトラインの太さを変える

 

他にもいろいろと設定項目がありますが実際に手を動かしてどういうものかをつかんだほうが早いと思います。

 

よく使うのはこの二つかなって思います。

 

他にもテクスチャを設定すればその通りになるし色々試してみてください。

 

通常のTextでは表現できなかったものも簡単に動かせるようになります。

 

なおスクリプトから動かすなら『using TMPro』をつけるのを忘れずに。

 

テキストを動かしたいならTextMeshProUGUIが対象となります。

 

TextMeshProUGUI testText;

 

void Start()

{

     testText.text="TEST";

}

 

とまあ通常のテキストとほとんど使い方は同じになります。

 

 

他にも便利機能をご紹介していきますね。