・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してみましょう。
{}の対応が間違っていないか、全角スペースが入っているかなど、確認してみましょう