・GameCanvasの機能:今週使う変数、メソッド
<古いgameCanvasの情報です>
・int gc.CameraDeviceCount;
・カメラの数
・gc.StartCameraService(int camera_id)
・カメラの映像入力を有効にします。
・gc.StopCameraService()
・カメラの映像入力を無効にします。
・string gc.GetCameraDeviceName(int id)
・カメラの名前
・gc.DrawCameraImage(x,y);
・カメラ画像を座標xyに描画します。
・gc.DrawScaledRotateCameraImage(x,y,sizex,sizey,rot);
・カメラ画像を座標xyにsizex,sizeyの画像としてrod度回転して描画します。
<古い情報ここまで>
・gc.PlaySound(GcSound);
・BGM,SEを鳴らす命令です。
・引数はGcSound.XXXという形で指定します。
(XXXはResフォルダ内のwavファイル名)
・音を追加したい場合は、下記の手順で追加します。
・wavファイルまたはmp3ファイルを用意
・Project窓でResフォルダを状態で、ファイルをドラッグ&ドロップ
・gc.PlaySound(GcSound,GcSoundTrack,bool loop);
・複数の音を同時に扱いたい時やループ再生させたい時に使います。
(BGMを流しつつSEを鳴らしたい時など)
・2つ目の引数は以下の何れかを指定してください。
GcSoundTrack.BGM1
GcSoundTrack.BGM2
GcSoundTrack.BGM3
GcSoundTrack.Master
GcSoundTrack.SE
・3つ目の引数はtrueにするとループ再生、falseにすると1回のみ再生します。
・引数1つのPlaySoundはGcSoundTrack.Masterで再生します。
・gc.StopSound(GcSoundTrack);
・鳴らした音を停める命令です。
・引数は以下の何れかを指定してください。
GcSoundTrack.BGM1
GcSoundTrack.BGM2
GcSoundTrack.BGM3
GcSoundTrack.Master
GcSoundTrack.SE
・gc.Save(int key,int value);
・keyというidで数値valueを保存領域に保存します。
・int gc.TryLoad(id key); //旧gc用
・保存領域にkeyというidで保存された数値があれば、値を返します。
・gc.TryLoad(id key, out value);//新gc用
・保存領域にkeyというidで保存された数値があれば、値をvalueに入れます。
前回、apkが作れなかった人、xcodeを用いてうまく実機で動かせなかったmax&iOSユーザーは、前回の課題の問題解決から始めましょう。 「課題の進め方」 ※今回は第9回なので、フォルダはk09に改名してください。 サンプルの起動を確認し、スクリプトが編集できる状態になったら、 続きを読み進めてください。
(クラスに入った直後)に変数の宣言を足す
int camera_id=0;
int camera_num;
string camera_name= "";
GcCameraDevice? m_Camera;
(InitGame()の中)に初期化処理を足す
gc.SetResolution(640,480);
if (gc.HasUserAuthorizedPermissionCamera)
{
PlayCamera(0);
}
else
{
gc.RequestUserAuthorizedPermissionCameraAsync(success =>
{
if (success)
{
PlayCamera(0);
}
else
{
camera_name = "Error: no permission";
}
});
}
(UpdateGame()の中)に下記の行を足す
if (gc.GetPointerFrameCount(0) ==1 ){
camera_id++;
if (camera_id >= gc.UpdateCameraDevice()) camera_id= 0;
PlayCamera(camera_id);
}
DrawGame()の中に下記の行を記載
gc.ClearScreen();
gc.DrawCameraImage(m_Camera,0f,0f,0.25f,0.25f,0f,true);
gc.DrawString(camera_name,0,0);
クラスを閉じるかっこの手前にメソッドを追加
void PlayCamera(int id)
{
if(id>= gc.UpdateCameraDevice()){
id = 0;
}
if (gc.TryGetCameraImageAll(out var devices))
{
m_Camera = devices[id];
camera_name = m_Camera.DeviceName;
}
else
{
camera_name = "Warn: no camera";
}
}
(クラスに入った直後)に変数の宣言を足す
int camera_id;
string camera_name;
(InitGame()の中)に初期化処理を足す
gc.SetResolution(640, 480);
camera_id = 0;
camera_name = gc.GetCameraDeviceName(camera_id);
gc.StartCameraService(camera_id);
(UpdateGame()の中)に下記の行を足す
if (gc.GetPointerFrameCount(0) ==1 ){
camera_id++;
if (camera_id >= gc.CameraDeviceCount) camera_id= 0;
camera_name = gc.GetCameraDeviceName(camera_id);
gc.StartCameraService(camera_id);
}
DrawGame()の中に下記の行を記載
gc.ClearScreen();
gc.DrawScaledRotateCameraImage(100, 100, 25, 25, gc.CurrentCameraRotation);
gc.DrawString(camera_name, 15, 15);
DrawImageの代わりにDrawCameraImageを使いましょう。
(新しいgameCanvasの方はこちらを使用)
gc.DrawCameraImage(m_Camera,player_x,player_y,0.1f,0.1f,0f,true);
(古いgameCanvasの方はこちらは使用)
画像が大きすぎる場合はgc.DrawScaledCameraImageを使いましょう。
(0.1f倍にしてから調整してみましょう)
gc.DrawScaledRotateCameraImage(player_x,player_y,5,7,gc.CurrentCameraRotation);
バランスの変更は下記を参考にしてみましょう。
int player_speed = 3;
int active_box_num = 0;
active_box_num = 5 + count/600;
if(active_box_num > BOX_NUM){
active_box_num = BOX_NUM;
}
//箱を動かすfor文の繰り返し回数を変えましょう
// BOX_NUM から active_box_numに変える
for(int i = 0;i < active_box_num; i++ ){
//繰り返す内容(箱を動かす、プレイヤーとの接触判定)
}
//変数宣言に追加
int high_score = 0;
//initGame内に追加
gc.TryLoad("hs",out high_score);
//updateGameの中
//scoreが変った時に呼ぶ
if(score>high_score){
high_score = score;
}
//ゲームオーバーになったタイミングで呼ぶ
gc.Save("hs",high_score);
//別途、音を鳴らしたいタイミングで以下を呼びましょう
gc.PlaySound(GcSound.Click1);
//音をループ再生させたい時、音を停めたい時は以下の命令を入れます
//例えば、ゲームオーバーになった時に鳴らす、
//ゲームオーバー画面でクリックすると停まる、など。
gc.PlaySound(GcSound.Click2,GcSoundTrack.BGM1,true);
gc.StopSound(GcSoundTrack.BGM1);
//drawの中
//ハイスコアも表示してあげましょう。(ゲーム中、終了時)
gc.DrawString("HIGH:"+high_score,0,60);
より良くする案を考えてみましょう。
プログラムが間違っていてビルドエラーが出ている可能性が高いです。
エディタ上でbuildしてみましょう。
{}の対応が間違っていないか、全角スペースが入っているかなど、確認してみましょう