blog

3Dジョイスティック・コントローラの簡単な実装!

移動と視点を制御するためのテレコントローラの3Dサンプルプロジェクトです。\n効果\n\n原理\nスネークバトルでヘビの動きを考えて実装! ではジョイスティックコントローラーを使用していましたが、2D...

Jun 9, 2020 · 3 min. read
シェア

動きと遠近感を制御するテレコントローラの3Dサンプルプロジェクト。

効果

原則

大食いバトルでヘビの動きを考えて実装! ではジョイスティックコントローラーを使用していましたが、2Dレベルでした。

ロッカー

ジョイスティックの原理は、タッチポイントの位置を目的の部品に伝えるというものです。

タッチ・イベントを聞いた後、座標変換をする必要があります。 UITransformComponent Cocos 3Dでは座標変換はコンポーネントを使って行われます。

そして、座標と角度をイベントとして送信するだけです。

onTouchMove(e: EventTouch) {
 const location = e.getUILocation();
 // 座標変換
 let pos = this.uITransform.convertToNodeSpaceAR(new Vec3(location.x, location.y));
 // 半径に応じて位置を制限する
 this.clampPos(pos);
 // 中点の位置を設定する
 this.midNode.setPosition(pos.x, pos.y, 0);
 // で角度を計算する。
 let angle = this.covertToAngle(pos);
 // コールバックをトリガーする
 this.joyCallBack.forEach(c => c.emit([pos, angle]));
}

動きと視点

ここでは3つのノードに分かれており、それぞれノードの移動、キャラクターの回転、視点の回転を制御します。

ジョイスティックが返す結果を使って、モデルの初期状態とカメラの角度から移動速度と回転速度を計算することができます。

/** ジョイスティックを動かしてコールバックをトリガーする*/
joysitckCallback(vector: Vec3, angle: number) {
 // カメラの角度によって回転する
 Vec3.rotateZ(vector, vector, Vec3.ZERO, this.node_camera.eulerAngles.y * macro.RAD);
 this._vector = vector.normalize();
 if (angle) {
 // モデルは最初正面を向いている。
 this.node_role.eulerAngles = new Vec3(0, angle + 90 + this.node_camera.eulerAngles.y, 0);
 }
}
/** ジョイスティックを回転させてコールバックをトリガーする*/
joysitckAngleCallback(vector: Vec3, angle: number) {
 this._vectorAngle = vector.normalize();
}

スピードにもよりますが、位置と角度を毎フレーム更新するだけです。

fix_update(dt: number) {
 if (this._vector.lengthSqr() > 0) {
 this.node.setPosition(this.node.position.add3f(this._vector.x * SPEED * dt, 0, -this._vector.y * SPEED * dt));
 } 
 if (this._vectorAngle.lengthSqr() > 0) {
 this.node_camera.eulerAngles = this.node_camera.eulerAngles.add3f(0, -this._vectorAngle.x, 0);
 }
}

概要

座標変換!回転ジャンプ止まらない

上の写真はCocos Creator 3D v1.1.1を使って "ジョイスティック・コントローラー!"を実装したWhite Jade Without Iceです。 技術の共有。お友達と共有することを歓迎します!

モチベーションを上げられない人は、他の才能がどんなに素晴らしくても、平凡なものに甘んじてしまう人に違いありません。





全コード

Read next

JDKとJREの違いは何か?

JREは、Java仮想マシン、Java基本クラスライブラリを含むJava実行環境です。jdkはjava開発キットで、プログラマーがjava言語を使ってjavaプログラムを書くために必要な開発ツールキットです。

Jun 8, 2020 · 2 min read

J13 行間の色変更

Jun 6, 2020 · 3 min read

22.ブラケット世代

Jun 6, 2020 · 1 min read