PlayCanvasで「Roll a Ball」をつくる③

#おさらい
前回はキーボード操作で動くプレイヤーの作成まで行いました。
今回はステージに壁の作成をし、アイテムを追加し、衝突によって取得できるようにしたあと公開するまでをやっていきます。

##壁の作成
![image](https://qiita-image-store.s3.amazonaws.com/0/148084/94043ef7-4e33-f91b-6264-f72edd561e35.png)
ヒエラルキーのRootを選択した状態から右上の「＋」を押下し、「Box」を新規作成します。

Boxのインスペクターから、
Position : 0,0.5,9.5
Scale    : 20,1,1
に設定します。

また、この壁にcollisionとRigid bodyをそれぞれ追加します。
collisionのHalf Extentsは(10,0.5,0.5)に設定します。
![image](https://qiita-image-store.s3.amazonaws.com/0/148084/c7d5d76c-e42e-d765-d2c3-bb16c5ed25b0.png)

壁が追加できたら、ヒエラルキーよりBoxを選択して、ヒエラルキーの「Duplicate Entity」を選択し、エンティティを4つDuplicate(複製)します。
![image](https://qiita-image-store.s3.amazonaws.com/0/148084/f93d1c90-0e42-6189-ac9a-825e03ddf247.png)

###壁の配置
それぞれのBoxが四隅に配置されるように、インスペクターを調整します。
Box1
Position : 0, 0.5, 9.5
Rotation : 0, 0, 0

Box2
Position : 0, 0.5, -9.5
Rotation : 0, 0, 0

Box3
Position : 9.5, 0.5, 0
Rotation : 0, 90, 0

Box4
Position : -9.5, 0.5, 0
Rotation : 0, 90, 0

上記のように配置すると四隅に壁が作られます。
![image](https://qiita-image-store.s3.amazonaws.com/0/148084/63302797-2443-e104-3ccf-53078d865f30.png)

実行すると壁にぶつかることが確認できます
![image](https://qiita-image-store.s3.amazonaws.com/0/148084/bda6e7e9-a4c5-b185-2c67-7b4aaefb08b5.png)

##キューブの追加
プレイヤーが回収するキューブを追加して行きます。
ヒエラルキーよりBoxエンティティを新規作成します。

名前を「Cube」にします。
またインスペクターより各パラメーターを以下のように修正します。

Position
　x: 0, y: 0.5, z: 8
Rotation
　x: 45, y: 45, z: 45

CollisionとRigid bodyも追加します。　Rigid BodyのTypeはKinematicを選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/148084/e771d24e-8217-f7bb-b77a-5097edf5d731.png)

実行してぶつかると反発することを確認します。

###キューブに挙動を追加
キューブにスクリプトを加えて、挙動を追加します。
キューブにスクリプトコンポーネントを追加し、「CubeControl」を新規作成してアタッチします。
CubeControl.jsを以下のように記述します。

```javascript:CubeControl.js
var CubeControl = pc.createScript('cubeControl');

// initialize code called once per entity
CubeControl.prototype.initialize = function() {
    
};

// update code called every frame
CubeControl.prototype.update = function(dt) {
    //回転
    this.entity.rotate(-1.5,1.5,0);
};
```

実行してキューブが回転していることを確認します。

###キューブの獲得
プレイヤーとの衝突判定を実装し、キューブを獲得できるようにします。
CubeControl.jsを以下のように書き換えます

```javascript:CubeControl.js
var CubeControl = pc.createScript('cubeControl');

// initialize code called once per entity
CubeControl.prototype.initialize = function() {
    this.entity.collision.on("collisionstart",this.col,this);
};

// update code called every frame
CubeControl.prototype.update = function(dt) {
    //回転
    this.entity.rotate(-1.5,1.5,0);
};

CubeControl.prototype.col = function(object){
    if (object &&
        object.other.rigidbody &&
        object.other.name === "Player") {
        // コリジョンの相手の名前が`Player`の場合に自身を消去する
        this.entity.destroy();
    }
};
```

実行して、衝突したキューブが消えることが確認できたら成功です。
キューブをDupulicateして、ステージに5. 6個配置しましょう。
![image](https://qiita-image-store.s3.amazonaws.com/0/148084/e200b8e6-cc0f-7544-8def-911be76cac08.png)


#パブリッシュ
最後に、完成したゲームをパブリッシュして体験可能な状態にします。
シーンビュー上の「Manage Scenes」を選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/148084/03388362-3f52-159b-d663-e6a4c959b17b.png)

PUBLISH > PUBLISHを選択
![image](https://qiita-image-store.s3.amazonaws.com/0/148084/0d1dcfd2-117b-efd9-01a9-81ab616e7eca.png)

「PUBLISH NEW BUILD」画面になったら一番下の「PUBLISH NOW」を選択します
![image](https://qiita-image-store.s3.amazonaws.com/0/148084/7493ad66-6a56-f086-3872-eb70719b661b.png)

するとビルドが行われ、実行可能なURLが発行されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/148084/c588da47-a801-3c4c-ec95-e3da9599b3e3.png)
このURLから遊ぶことができます。

##リンク
このプロジェクト
https://playcanvas.com/project/455828/overview/roll-a-ball
完成したゲーム
https://playcanv.as/p/ZWJDIe8M/