Unity ブログ -Game Clearの定義-
『childCount』の使い方
私はこのように使っております。
if(this.transform.childCount == 0)
{
Destroy(gameObject);
}
こう書くことで「このオブジェクトの子オブジェクトの数が0になったら、このゲームオブジェクトを壊す」となります。
空のオブジェクトの中にブロックを入れておき、全部ブロックがなくなったら空のオブジェクトが壊れたり、0になったときにまた何かをするなどのフラグとしても有効です。
今回、ブロック内のスクリプトを
void OnCollisionEnter(Collision collision)
{
Destroy(gameObject);
}
using UnityEngine.UI;
using TMPro;
Transform myTransform;
public GameObject targetbutton;
public GameObject TextMPgameover3;
public GameObject targetball2;
public GameObject player2;
void Start()
{
myTransform = transform;
}
void Update()
{
if (myTransform.childCount == 0)
{
TextMPgameover3.SetActive(true); //game clear
targetbutton.SetActive(true); //reward
targetball2.GetComponent<Rigidbody>().velocity = Vector3.zero;
targetball2.GetComponent<Rigidbody>().angularVelocity = Vector3.zero;
player2.GetComponent<Rigidbody>().velocity = Vector3.zero;
player2.GetComponent<Rigidbody>().angularVelocity = Vector3.zero;
}
}
『using TMPro;』
Unity ブログ -オブジェクトの表示と非表示の話-
考え方
- スフィアにボールが当たる
- エフェクトを表示させる
- エフェクトを変える
みたいなざっくりとした考えとなりますが、そこからどうスクリプトに組み込むかを考えていきます。
で、私が考えたのがスフィアに当たった回数を保存させて、その当たった回数に応じてエフェクトオブジェクト(吹き出し)を変えて表示するというものでした。
この考え方が一番わかりやすいですね。
で、いつスフィアにボールが当たってもいいようにUpdate関数に入れていきます。
で、完成したスクリプトがこちらです。
int HitCount = 0;
int Hitcal = 0;public GameObject balleffect;
public GameObject emotionheart;
public GameObject emotionnote;
public GameObject emotionstar;
void Update()
{
Hitcal=HitCount%4;
if(Hitcal == 1)
{
emotionheart.GetComponent<heartappear>().heartActive();
emotionnote.GetComponent<noteappear>().noteHide();
emotionstar.GetComponent<starappear>().starHide();
}
else if(Hitcal == 2)
{
emotionheart.GetComponent<heartappear>().heartHide();
emotionnote.GetComponent<noteappear>().noteActive();
emotionstar.GetComponent<starappear>().starHide();
}
else if(Hitcal == 3)
{
emotionheart.GetComponent<heartappear>().heartHide();
emotionnote.GetComponent<noteappear>().noteHide();
emotionstar.GetComponent<starappear>().starActive();
}
else
{
emotionheart.GetComponent<heartappear>().heartHide();
emotionnote.GetComponent<noteappear>().noteHide();
emotionstar.GetComponent<starappear>().starHide();
}
}
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject == balleffect)
{
HitCount++;
}
}
1つずつこのスクリプトを見ていきますね。
肝となるのがここの部分「HitCount%4」
「%」の計算……これは割り算をしております。
しかもただの割り算ではありません。
割り算した結果のあまりを計算するのです。
なのでこの式の場合、値は絶対に「0」「1」「2」「3」のどれかになるわけです。
今回のスクリプトの場合スフィアがボールに当たって、当たった回数が「1」になったら、ハートマークのエフェクトオブジェクトが表示されます。当たった回数が「2」になれば、ハートマークが消えて、音符マークに切り替わります。当たった回数が「3」になれば、音符マークから星マークに切り替わり、最後4回当たったら、割り算の計算結果は「0」。そうなったらすべてを非表示になります。元の数字は「0」なので、初期化するという意味も含めて、「0」の時にすべて非表示の方が都合がいいですね。
スフィアにボールが何度当たっても4つの値のどれかにしかならないんですよね。
この考え方をしっかり身に着けられるかどうかで思いついたことが実行できるかできないか結構分れる(気がする)んですよね。
後はif文で条件付けしちゃえば順番通りにエフェクトオブジェクトが切り替わっていくという寸法です。
if文内は関数を割り当て、目当てのエフェクトオブジェクトを表示させ、他を非表示させているだけですね。starHide()とかstarActive()内の関数はそのままSetActive関数を用いてtrue/falseで管理しております。
動画内ではスフィアの色も変えておりますが、このif文内に付けてたりもしてますね。
GetComponent<Renderer>().material.color = Color.red;
と書くことで、マテリアル内のカラーを変更(この場合は赤に)することができます。
で、スフィアにボールが何回当たっているかを、 OnCollisionEnter関数で計算しております。
長いですが、かなりわかりやすく、自分で把握しやすくなるんですよね。
自分で書いたスクリプトでも、結構他からそのままコピペして、結果見返してみても訳がわからないということになることが多いです。
しっかりコメントとか残すのがいいと思います。
(Unity内だと日本語が文字化けしてしまってなんか嫌になっちゃうんですけどね。)
今回のお話はここまでです。
割り算の考え方の例をご紹介しました。
「%」こいつは結構使えるのでぜひとも参考にしていただければ幸いです。
Unityブログ -指定した色が付かない問題-
Lens Flare (レンズフレア) は、カメラのレンズ内で屈折する光の効果をシミュレートします。明るい、あるいはぼんやりとした光を表現するのに、、シーンにちょっとした雰囲気を加えるために使用されます。
UnityでVRoidキャラクターを動かしてみた①
このブログはこんな方向け!
・Unity辞めたって人
・Unityやってみたいって人
・ゲーム作りに興味がある人
この記事でわかること
・unityでVRoidキャラクターを入れる方法
・VRoidキャラクターの動かし方
・動きの編集について
アニメのような3Dキャラクターを手軽に!無料で!
でも実際に動かすのって出来るの?難しくないの?
と思うかもしれません。
実際に動かすことが可能です!
ものの数十分で出来たりします!
その手順についてご説明しますね!
全体の流れはこんな感じです。
- VRoidデータを読み込もう!
- mixamoからFBXデータをダウンロードしよう!
- FBXデータをUnityに取り込もう!
- アニメーターを設定しよう!
- FBX同士を繋げてみよう!
- 背景を設定してみよう!
今回は1-3について説明しますね!
■VRoidをunityに読み込もう!
さっそく、
ですがそのままUnityで読み込むことは出来ません。
準備が必要となります。
それがこちら!『UniVRM』
これをインストールする必要があります。
Unityのインストールはマイアセットなどが主流ですが、これはそんなに手間がかかるものではありません。
こちらのURLからDownloadの横の青い文字のボタンを押すだけです。
するとVRM-0.107.2(2023年1月現在)ファイルがDLされています。
これをダブルクリックしてインストールボタンを押すだけです!
Unityを開いて、プロジェクト欄にあるAssetsの中にドラック&ドロップします。
すると、Prefab化したデータが生成されるので、それをHierarchyやSpaceにドラック&ドロップすることでUnity内で動かすことが出来るようになります。
読み込めていない場合は、VRMデータをクリックしてInspectorを見てください。
タブが3つあり、Model,Materials,Vrmがあると思います。
そのうちModelを選択し、Migrate To Vrm1 にチェックを入れてApply(適用)をクリックします。すると、プレハブのように動かせるようになると思います。
■MixamoからFBXデータをダウンロードしよう
続いて動いてほしいモーションデータのダウンロードです。
Mixamoというサイトがあります。
これはモーションデータをたくさんあるAdobeが運営しているサイトだそうです!
〇まずはサインイン
私はGoogleとの連携でログインしました。
するとこういうページになります。
左上の虫眼鏡マークのところが検索欄で、ここにキーワードを入れてモーションを探します。
walk とか jump とかですね! Danceもありますが、盆踊り的なイメージを持っていただけると良いですね。全部見たわけじゃないですが、すぐMMDで活用できる!というのはなさそうです。
1つ選んだら下図のような感じになります。
このモーションだと5つのパラメーターを操作できそうですね。
色々弄ってみると面白いですね。
例えばこの欄の上の[Enthusiasm]ここを0にすると左右前後の範囲が狭まり、100にすると範囲が広くなります。
[Mood]だと顔の向きなどが変わりますね。
[Overdrive]の値は全体スピードと考えても差し支えなさそうです。
などなど、気に入ったパラメーターにしてダウンロードすることが出来ます。
■FBXデータをUnityに取り組んで設定
Unityでは特に何もせずともFBXデータを読み込んでくれます。
ただし、VRMデータにモーションを当てる時は注意が必要です。
モーションデータの設定を弄る必要があるからです。
方法は簡単です。
モーションデータを選択して、Inspectorを見ます。
そして下のRigタブをクリックしてもらい、アニメーションタイプをヒューマノイドに選択してもらいます。
そうすることで、Prefab化したVRMのキャラクターでもFBXのモーションデータでモーション通りに動かすことが出来るようになります。
そして次がアニメーションですが、今回はここまでとしますね。
次回は続き、アニメーターの設定です。
少しでも参考になれば幸いです。それでは!