ゴブリンが移動するようにする
ゴブリンが左右にランダムに移動するような処理を加えます。
移動処理はScriptコンポーネントから行います。
ASSETの右のADD ASSETからScriptを新規作成してください
Scriptの名前は[enemy]と入力してください
enemy.jsが作成できたら、HIERARCHYからenemyを選択し、ADD COMPONENTでScriptを追加してください
Scriptが追加できたら、ADD SCRIPTから先ほど作ったenemyを選択します。こうすることでentityにscriptをアタッチすることができます
enemy.jsがアタッチできたら、enemyの横のeditボタンを押してCode Editorを起動します
Code Editorが起動したら、enemy.jsを以下書き換えてください
var Enemy = pc.createScript('enemy');
/*attributesに右、左それぞれの移動量を定義*/
Enemy.attributes.add("RIGHT_MOVE",{type:"number",default:0.01});
Enemy.attributes.add("LEFT_MOVE",{type:"number",default:-0.01});
// initialize code called once per entity
Enemy.prototype.initialize = function() {
/*カウンタ初期化*/
this.count = 0;
/*左右移動を変更するインターバル*/
this.change_interval = parseInt(50 + Math.random() * 20,10);
/*どちらに進むか*/
this.movefor = (Math.random() > 0.4)? this.RIGHT_MOVE : this.LEFT_MOVE;
};
// update code called every frame
Enemy.prototype.update = function(dt) {
/*毎フレーム加算する*/
this.count ++;
/*インターバルごとに向きをランダムで変更する*/
if(this.count % this.change_interval === 0){
this.movefor = (Math.random() > 0.4)? this.RIGHT_MOVE : this.LEFT_MOVE;
}
/*指定した方向へ移動*/
this.entity.translate(this.movefor,0,0);
/*移動方向に合わせてspriteの向きを変更*/
this.setDirection(this.movefor);
};
/*ベクトルに応じてspriteの向きを変更するメソッド 引数:x軸の移動量*/
Enemy.prototype.setDirection = function(accu) {
this.entity.sprite.flipX = (accu < 0);
};
実行して、ゴブリンが左右に移動することを確認してください。
当たり判定も追従させる
このままだと、ゴブリンのspriteは移動していますが、当たり判定は追従しておらず、その場に残り続ける形になっています
これはRigidbodyのtypeがStaticなため起こる現象です。translateで移動するオブジェクトがRigid Bodyを持つ場合、Rigid BodyのTypeはKinematicに変更する必要があるので、INSPECTORから変更してください。
また、Scriptコンポーネント内でattributeに定義した値は、定義したスクリプトのparseボタンを押すことでEditor上に表示することができます。以後ゴブリンの左右の移動量はINSPECTORから変更可能です。
試しにRIGHT_MOVEを0.03に変更してみましょう
右への移動速度は速くなったでしょうか?
このようにattributeを使うとScriptの変数に対してEditorからアクセスすることができます
コメント
0件のコメント
サインインしてコメントを残してください。