Bakinのデフォルトのカメラがあまりにもグリグリ動かせてしまうので、 PS1風の45度回転だけができるカメラを実装したくてイベントコマンドで組んでみました。
問題なく組めたのですが、イベントコマンドだと見通し悪いしメンテナンス性も皆無な上に Bakin上でしかコピペできないのでC#スクリプトで再現することに決定しました。
エディタ側の左下にスクリプトを割り当てる箇所があるので、 そこで新規作成をするとC#スクリプトのテンプレートが作成されます。
テンプレートを覗いてみると、Unityのスクリプトに似た関数が用意されているので
Unityで1度でもスクリプトを組んだことのある人はある程度すぐ馴染めるんじゃないでしょうか。
現状は1イベントに対して1スクリプトの割り当てになるため1つのファイルが肥大化しそうと思いましたが、 バトルプラグインサンプルなんかを見ると別のスクリプトをインクルードして使えるみたいです。
カメラ回転のコモンイベントを作る前にカメラの値を画面上にデバッグで表示するモノを作りました。
簡単に説明するとカメラの回転度Yを変数に格納し、文字列を画像として表示するイベントを使って毎フレーム描画させるものです。
スクリプトでも同じものが作られるので、Bakinのスクリプト入門としてはかなり良いかもしれません。
BakinObjectを継承したクラスであれば色々なゲーム内の値を取得したり設定したりすることができます。
今回欲しいのはカメラの回転の角度です。
3次元なのでちょっと混乱するかもしれませんが、画面でいう横回転はYとなります。
横だからXではないことに気を付けてください。
Yのアングルを取得するには、mapScene.yAngle
で取得が可能。Xも同じ感じでとれます。
float cameraY = mapScene.yAngle; // カメラのY軸回転度を取得
float cameraX = mapScene.xAngle; // カメラのX軸回転度を取得
直接値を描画してもいいですが、変数に入れておくとすっきりします。
次に取得した値を画面に表示したいと思います。
イベントコマンドでいうと「イメージとして画面に文字を表示する」に該当する処理を行います。
イベントコマンドで出来ることはスクリプト側でも基本可能です。
逆にイベントコマンドで出来ないことはスクリプトで実現するってことですね。
それでは取得した角度を画面に表示してみましょう。
まずusingとして以下を読み込んでおきます。
using System;
using Yukar.Engine;
using Yukar.Common.GameData;
using Microsoft.Xna.Framework;
次にクラス変数で描画するためのインスタンスを保持するための変数を作って
初期化時にnewしてインスタンスを作成しておきます。
private TextDrawer textDrawer;
public override void Start()
{
// 画面描画用クラスを使えるようにする
textDrawer = new TextDrawer();
}
TextDrawerクラスは「Yukar.Common.GameData」をusingすることで使えるようになります。
そして使い方としては描画関数を毎フレーム呼び出してやる必要があります。
なぜなら、1回だけ関数を実行しても次のフレームで画面クリアされて消えてしまうからです。
public override void Update()
{
// TextDrawインスタンスが空なければかつスイッチがONなら実行
if (textDrawer != null)
{
// 画面に文字をイメージとして表示
textDrawer.DrawString
(
"Y回転(横)度:" + cameraY + "\nX回転(縦)度:" + cameraX,
new Vector2(5, 5),
Color.White,
1.0f,
0,
false,
false,
true
);
}
}
まずtextDrawのインスタンスがnullじゃないかを調べておきます。
もしインスタンスの生成に失敗していたらnullになっていてDrawString関数を実行しようとしても
nullなのでプログラムが落ちてしまいます。
nullじゃないことが確認出来たら中でtextDrawerが持つDrawString関数を使って描画します。
引数に関しては公式のリファレンスを閲覧してください。
簡単に説明すると、引数1つ目は表示したい文字列で2つ目は描画位置ですね。
後はこのスクリプトをどこでもいいので有効になっているところにアタッチすれば
ゲームスタートをした時に左上に現在の回転度が表示されます。
カメラを動かすとリアルタイムで数値が変わることが分かるかなと思います。
ちなみに「Microsoft.Xna.Framework」はVectro2型を使うために読み込んでいます。
カメラの回転度を取得して画面に秒することを学びました。
回転度は取得するだけ(Get)だけではなく設定(Set)することも可能です。
よくわからなかったらイベントコマンドで実現してみるといいかもしれません。
次回作っていく一定の角度で回転するカメラを作るには、
ボタンが押されたら状況に応じて回転する方向を決めて毎フレーム増やして
一定の角度までたどり着いたら回転を止めるというものになります。