UnityでWebGLにビルドする方法

Unityでゲームを作成したら、公開したいですね。
Unityでは、色々な方法でユーザーへ提供することが可能です。
その中でも、Webでの公開は誰でもアクセス可能なので広く多くの人に使ってもらう選択肢になります。

UnityでWebGLにビルドする設定

File > Build settings > PlatformでWebGLを選択

最初に、PlatformをPCで設定している人が大半だと思います。
webGLを選択した際に、Switch Platformのボタンがあるのでそこを選択すると上記の状態になります。

そこから、Buildか Build And Runをしてください。
どちらでもいいですが、自分はBuildしてファイルにしてから自分で実行しています。

Build:
Buildした状態のファイルを作るのみ ※その後に、実行ファイルを開く

Build And Run ;
Buildして、完了と同時にファイルを自動的に実行

C#で、nullか空白のInputを判別する方法

String.IsNullOrEmpty メソッドを使うと便利です。

https://docs.microsoft.com/ja-jp/dotnet/api/system.string.isnullorempty?view=netcore-3.1

if (string.IsNullOrEmpty(roomName))     
{         
roomName = "Room" + Random.Range(100, 1000);     
}

String.IsNullOrEmpty はbool値を返します。
null か空白の場合には、trueを返すので、対処内容を記載しましょう。

UnityのBlendTree機能が半端ない件

Unityで、Animationを操作する際には、
Animation ClipをAnimation Contorollerに載せて切り替えることで操作していると思います。

ただ、これだと、Animationが1つ1つ切り替える仕様になっており
細かく見ていくと、Animationの切れ目がぶつ切りになってしまう状態です。

そこで、活躍するのが Blend Tree です。
Blend Tree は、個別のAnimation Clipを滑らかに変化させていくAnimation操作が実現可能です。

■Blend Treeはどんなときに使うのか

一般的に使われるのは、Playerの移動Animationなどが分かりやすいかと思います。
例えば、左側に歩いて → 左前方 → 前方 と移動が変化していく際に
完全にAnimationがぶつキレるのではなくて、緩やかにAnimation Clipを入れ替えてくれるのです。

■Blend Treeの使いかた

Unityのドキュメントを見るのが一番わかりやすいと思いますm(__)m
今後、どこかでまとめたいと思います。

https://docs.unity3d.com/ja/2018.4/Manual/class-BlendTree.html

【Unity】Animationを設定すると空中に浮く問題を解決する

Unityでよく使われる機能にAnimationがあります。
タイトルに記載したように、ObjectにAnimationを設定した際に空中に浮いた状態になってしまったので、そちらを解決していきます。

まず、どういった状況なのかをもう少し説明します。

■Animationなしの状態


■Animationありの状態

なぜ、こういった問題が起きたかというと

アニメーションの位置はAnimation Clipに設定されている値が優先されて表示されるという特性があるからです。

これが凄く、抜け漏れがちな優先順位です。
今回は扱いませんが、Scriptで設定した内容よりもAnimation Clipが優先されてしまいます。

で、Animation Clipが宙に浮いている足の部分に
親gameobjectの位置を設定しているのでこういった状態になっております。

解決方法は、親gameobjectの位置を床面に接する位置に配置してあげることで解決しました。

Unityのscriptのアイコンが歯車になった件

Unityでscriptを作成したら、いつもならC#のアイコンなのに、急に歯車になりました。
なにか、設定を変更してしまったのかなと思い調べてみると、同じようなシチュエーションになっている人がいるようです。

本当かどうか分からないんですが、
Scriptの名称を「GameManager」にすると歯車のアイコンになっているぽいです。

Unityでstringからintにキャストする際に、intに変換できる文字列なのかを判定する

C#に便利なメソッドがあるので、そちらを使っていきます。

TryParse メソッドです。

https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/strings/how-to-determine-whether-a-string-represents-a-numeric-value

int maxNum = new int();     
public InputField  maxNumberTextField ; // inspectorで紐づけ

if (int.TryParse(maxNumberTextField.text, out maxNum ))
{         Debug.Log(maxPlayerNum);  } 
else
{         Debug.Log("Invalid Number");  }

様々なデータ型に活用できるようです。便利です。

簡単に解説すると
TryParse 自体はbool を返します。
正しく変換できているとtrue, 間違っているとfalseを返します。

正しく変換できた値は、outに格納した変数に割り当てられてます。

UnityのCanvas Textで文字をサイズ拡大していくと見えなくなる問題を解決する

非常に単純です。
Textの設定をinspectorで変更してあげることで出来ます。

・Horizontal Overflow
・Vertical Overflow

これら両方を、Overflowに設定してあげることでサイズ拡大に伴う文字が見えなくなる問題を解決できます。

UnityのpublicとSerializeFieldの違い

publicとSerializeField使い方はどちらも似ているのですが、
違う部分は、

publicは
 inspectorからの操作:可能
 他のscriptからの操作 :可能
SerializeField
 inspectorからの操作:可能
 他のscriptからの操作 :不可

チーム開発している場合には、他のscriptから参照可能な状態だと、間違って操作されてしまう可能性があります。(Unityはpublicを推奨しているようですが….)
inspectorから操作したいだけの場合は SerializeField を使うのがいいのではないでしょうか。

Unityビルド時に、Building scene 0: から進まない問題の解決方法

以前、書いた記事で似たようなエラーがありました。
原因は、理解しきれいていないのですが、解決方法は同じでした。

Rendering > Lightsetting > Auto Generate をoffにすると、ビルドが進みました。

どうやら、UnityでのLightの処理負荷は、ビルド時に影響を及ぼしやすいのではないか、と思っております。

Unityでコルーチンを用いて、時間をずらして処理する方法

Unityで時間差の処理を用いる方法は幾つかあります。
その中で、コルーチンのやり方をお伝えします。

コルーチンを用いる方法は
(1):コルーチン関数を定義する
(2):コルーチン関数を呼び出す

(1):コルーチン関数を定義する

gameobjectをtrueにした3秒後にfalseにする関数
//関数名称  CoroutineTest() 
private IEnumerator  CoroutineTest() {     

//コルーチンの内容     
gameobject.SetActive(true);     
yield return new WaitForSeconds(3.0f);      
gameobject.SetActive(false); 

} 

(2):コルーチン関数を呼び出す

StartCoroutine("CoroutineTest");

コルーチン関数に引数が必要なときの書き方

(1):コルーチン関数を定義する

 //関数名称  CoroutineTest() 
private IEnumerator  CoroutineTest(Bool judge) {     

//コルーチンの内容     
gameobject.SetActive( judge );     
yield return new WaitForSeconds(3.0f);      
gameobject.SetActive( !judge ); 

}  

(2):コルーチン関数を呼び出す

StartCoroutine( CoroutineTest ( judge ))