【開発メモ】アシストキャラクターの実装 その2

というわけで、今回は前に実装したアシストキャラクターの続きになります!
前回の記事はこちら

【開発メモ】アシストキャラクターの実装 その1

前回でアシストキャラクターへの乗り降りまで実装したので、今回は実際にアシストキャラクターを操作する部分を実装してみようと思います!
基本操作はプレイヤーに合わせ、移動・攻撃・ジャンプなどの基本アクションを作っていきます。
処理を流用できる部分も多いため、実装だけならあまり苦戦はしなかったです。

移動系

基本的な移動はプレイヤーと同じく、CharacterMotorとPlatformInputControllerで行います。
今はアザラシをベースに作っているため、移動速度は少し遅めにしてみます。

また、アシストキャラには回避や二段ジャンプなどの特殊な移動は実装しない予定です。
そういう意味ではプレイヤーキャラに比べて単純かもしれません。
その分各キャラに特殊な能力を付けたいと思いますが、それはまた追々ということで!

攻撃系

攻撃判定の生成ロジックはプレイヤーと一緒です。
参考になりそうな過去記事はこちら

【再編集】Unity開発メモまとめ 「攻撃処理系」

【開発メモ】攻撃判定制御のリファクタリング

同じこと書いてもしょうがないので、アザラシに持たせる攻撃方法について考えます。
これは前々から決めていて、強力な遠距離攻撃を持たせる予定です。
通常攻撃は高威力の弾を発射し、特殊攻撃には敵を追尾するレーザーを放ちます。

shot2ss20151226120459482

使わなくなったパーティクルで良いものがあったため移植し、通常攻撃としました。
口から出すには弾が大きい気がしますが、あまり気にしないことにします!
特殊攻撃のレーザーはロジックが難しそうなので後回しにします。

問題点

今回までの実装で抱えている問題点を挙げてみます。

乗り降りの際の円形エフェクトの表示

円形エフェクトはEffekseerを使って表示していますが、エフェクト毎に個別でインスタンス化されているわけではなく、Effekseerオブジェクトから全体をコントロールしている(?)ようです。
それ故、「特定のエフェクトだけを有効・無効にする」ということが困難です。

EffekseerのUnityマニュアルを見てみると、コンポーネントの他にスクリプトからでも再生ができるようです。
これを使えば個別でエフェクトをコントロールできそう。
使う機会は多いと思われるため、EffectUtilityというユーティリティクラスを作成し、その中でハンドルを生成する関数を実装します。

using UnityEngine;
using System.Collections;

public static class EffectUtility {
    public static EffekseerHandle createEffekseerHandle(string fileName, Transform transform) {
        EffekseerHandle handle = EffekseerSystem.PlayEffect(fileName, transform.position);
        handle.SetRotation(transform.rotation);
        handle.SetScale(transform.localScale);

        return handle;
    }
}

このEffekseerHandle型にはStop()という関数が含まれており、これを実行することで止めることができます。
もっと効率の良い方法がありそうですが、とりあえずこれで解決!

AnimatorのAnyStateからの割り込み

ある意味最大の問題点です。
アシストキャラに乗っている場合、プレイヤーキャラは待機orダメージモーションのみで他のモーションは入りません。
が、AnyStateから設定されているダメージや回避などは割り込んで再生されてしまいます。

Controllerを動的に切り替えることができれば行けそうですが、Animatorを動的に変えること自体がかなり怖いです。
遷移しないようにスクリプトから無理矢理制御できなくもなさそうです。
とてもスマートとは言えませんが・・・。

CharacterControllerの当たり判定

アザラシは横長な動物なわけですが、CharacterControllerのカプセルコライダーは横向きにすることができません。
仕方なくHeightを小さくし、Radiusで調整するようにしましたが・・・

shot2ss20151226120714778

見ての通り胴体前後の判定がスッカスカです。
NPCの敵が相手なので致命的ではありませんが、これが対戦ゲームとかだったらクレーム殺到なレベルですね。
CharacterController自体の判定は移動制御のみに使い、別でダメージ判定用のコライダーを付けれれば何とかなりそうです。

まとめ

今まで「まとめ」が全然まとめじゃなかったので、今度から箇条書きでやったこと/分かったことを書いていくようにします!

・アシストキャラクターの基本コントロールはプレイヤーと同じ
・アザラシは遠距離型キャラクターにする
・Effekseerはスクリプトから生成することでhandleから個別に停止できる
・いろいろと問題あり

細かい部分に難がありますが、見てくれだけは一応完成。
上手くゲームシステムやステージ構成に組み込んで行きたいです。

今日のイラスト

またまたシルリスちゃんです。
輪郭はパスツールで、影はペンタブ+エアブラシで塗ってみました!
マウスで適当に影を付けるよりは味が出ている・・・気がする。

shilriss5

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*