clusterイージースクリプト 05テキスト表示するNPC
まだ「clusterイージースクリプト」のインストールが済んでいない人は先に済ませてくださいね。
こちらの記事からどうぞ。
NPCサンプル
「イージースクリプト」フォルダの「NPCサンプル」プレハブをシーンにドラッグアンドドロップしましょう。
こんな感じに調整
床に埋もれがちなので、シーン上か「インスペクター」から位置を調整してあげてください。
近づくとプレイヤーの方を向いて、ランダムで3つのあいさつが表示されます。
NPCスクリプトの内容は?
「NPCスクリプト.js」はそれなりに長いです。1つ1つ見ていきましょう。
setSub(["obj"]);
ee.start = () => {
setStep([1.2]);
}
まず序盤です。
あいさつが切りかわる度にカプセルをちょっと動かしたいので、setSubでそれを登録しています。
アイテムの子には「カプセル部分」「テキスト」「背景の青色」があるのですが、その中で「obj」がカプセル部分。
つづけて開始時に
setStep([1.2]);
という命令をしています。これにより、1.2秒ごとに反応させることが可能です。
メイン部分
さて、メイン部分です。
「カプセルを動かす」前半部分と、「プレイヤーを探して見つかったら反応」の後半部分に分けられます。
ee.main = () => {
if (val0 > 0) {
val0 = val0 - currentDelta;
if(val0 < 0) {
val0 = 0;
}
let val = ease(val0);
setSubPos(0, 0, val * 0.2, 0);
} else {
まずはここまで。
if (val0 > 0) {
val0 = val0 - currentDelta;
これは「val0が0より大きかったら、その値を段々下げていく」処理ですね。
前回も似たような部分が出てきました。
if(val0 < 0) {
val0 = 0;
}
そしてval0が0より小さくなっていたら、0で止めます。
let val = ease(val0);
setSubPos(0, 0, val * 0.2, 0);
ここが新しい表現です。letというのは変数を作る命令。valという仮に作った変数にval0の数字を入れているのですが、そのときeaseという命令を使っています。
easeを使うと数値が滑らかに(最初から最後まで同じペースではなく)変わるようになるのです。
その上で、setSubPosで上下方向の位置を変えています。
スクリプトの最初でsetSub(["obj"]);としていましたね。これによって、sub0番にobj(カプセル部分)が登録されています。
結局「0番のsubを」「Xは0」「Yはval×0.2」「Zは0」の位置に動かせ、という意味になります。
メイン部分後半
後半部分、プレイヤーを探したりテキストを表示したりする部分です。
if (stepChange) {
let target = findPlayer(1.5);
if (target) {
val0 = 1;
lookPlayer(target);
setText(pickRand(["こんにちは!", "ようこそ!", "元気ですか?", "いらっしゃい!"]));
}
}
}
}
まず、if(stepChange) とするとsetStepで表示しただけの時間が経過したかどうかを判定できます。最初のほうで1.2秒の数値を入れていましたね。
要するに今回は1.2秒に1回だけプレイヤーを探す形になります。
さて、findPlayerの部分は前回出たfindItemFirstとあまり変わりませんね。
こちらは複数プレイヤーがいる場合、一番近いプレイヤーを教えてくれるのがちょっと賢いです。
その後のif(target)は「プレイヤーが見つかったら」ということ。
そしてval0に1を入れます。高い位置にカプセルを動かすわけです。そこから段々下がっていく処理はすでにメイン部分前半で書きました。
lookPlayer(target);
これはfindPlayerなどで見つけたプレイヤーのほうを向いてくれる便利な命令です。
ある意味そのままですね。
setText(pickRand(["こんにちは!", "ようこそ!", "元気ですか?", "いらっしゃい!"]));
さて、最後のここです。
setText自体は前回も出ました。その中にpickRandとあります。1つランダムにピックアップしてくれる、これも便利な命令です。しかも前回と同じものを避けるようにしてくれます。
結果的に3つのあいさつから1つが選ばれて表示されるわけです。
文字列は " " でくくる必要があることも再確認しておきましょう。
Discussion