Apple Engine

Apple, iPhone, iOS, その周辺のことについて

WWDC 2017 の SceneKit サンプル Fox 2 を調べる その32

引き続き GameController クラスの残りの関数を見てゆく。

今回はプレイヤーキャラクター Max のコントロールについて。

 

コントロールについて

キャラクターのコントロールはバーチャルパッド、ゲームコントローラー、キーボードからの入力から以下の関数が呼ばれる。

 

ジャンプ

バーチャルパッドの A ボタンが押された時の処理で Max がジャンプする。
Bool 値が設定されているのは、ジャンプ中にもう一度ジャンプしないため。

func controllerJump(_ controllerJump: Bool) {
    character!.isJump = controllerJump
}

 

攻撃

バーチャルパッドの B ボタンが押された時の処理で Max が攻撃する。
攻撃状態を調べ、アニメーションが終わるまで次の攻撃ができない。

func controllerAttack() {
    if !self.character!.isAttacking {
        self.character!.attack()
    }
}

 

移動

バーチャルパッドやカーソルで移動を行う。
X、Y 軸の移動をを与える。

get で Max の現在の方向を取得可能。

var characterDirection: vector_float2 {
    get {
        return character!.direction
    }
    set {
        var direction = newValue
        let l = simd_length(direction)
        if l > 1.0 {
            direction *= 1 / l
        }
        character!.direction = direction
    }
}

 

カメラ視点変更

バーチャルパッドやキーで視点変更を行う。 操作は 移動と同様。

ここでは設定されていないが特定のカメラでは視点変更ができない。

var cameraDirection = vector_float2.zero {
    didSet {
        let l = simd_length(cameraDirection)
        if l > 1.0 {
            cameraDirection *= 1 / l
        }
        cameraDirection.y = 0
    }
}

 

次回はフレーム毎に更新される関数について見てゆく。