プログラムには間違いらしきものが見当たらないが、ビルドエラーが31個出てビルドできない。
MonoDevelop上でビルドエラーが31個出ている、という場合はこれに該当するものと思われます。
MonoDevelop上ではエラーが出ますが、プログラム自体に問題なければ、Unity上では動きます。
Unity上で再生ボタンを押してみてください。うまく動くかもしれません。
動かない場合はUnityのConsole窓に出ているエラー内容を確認してみましょう。
「作りたい物を手軽に簡単に作る」為のライブラリーです。
開発者は「Game.cs」に行いたい処理を書き加えていきます。
画像や音を使いたい場合は「Res」フォルダに足していきます。
一般的なUnityでのゲームの作り方(オブジェクトを配置、設定)とは
色々異なりますので、気になる方は、Unity公式ドキュメントや
過去のテキスト(GameCanvasを使用しないバージョン)を
ご参照ください。
・Game.csの構成。
InitGame(){
//起動時に1回だけ呼ばれます。
//ここに初期化処理を書きます。
}
UpdateGame(){
//1フレーム(初期値は1/60秒ですが、設定で変更できます)毎に呼ばれます。
//ここに動きの処理を入れていきます。
}
DrawGame(){
//1フレーム事に呼ばれます。ここに描画の処理をまとめます。
//上から下に描画処理が実行されるので、
//手前に描きたい物は、最後に記載する必要があります。
//(描画優先度の指定も可能です)
}
・座標系について
・基本的な画面解像度は横720x縦1280になっています(変更できます)。
・左上が(0,0)、右下が(719,1279)です
・x座標(横軸)、y座標(縦軸)の各パラメータを指定することで、
画面内の任意の位置に描画することができます。
・GameCanvasの機能:今週使う変数、メソッド
・int gc.GetPointerFrameCount(int);
・タッチされた瞬間からのフレーム数を返します
押されていない時は0、押した瞬間は1が入ります。
押し続けて居ると1フレーム毎に値が1増えます。
・引数はタッチしたポイントのIDです。
0以外を入れると、複数箇所をタッチした場合に、
2カ所目3カ所目等の各フレーム数を取得できます。
・gc.Random(int min,int max);//最小値と最大値の中で、何れかの数値を返します。
・例(サイコロを表現したい場合):gc.Random(1,6);
・gc.SetRandomSeed();//乱数のシード値を設定します
・やる度に結果を変えたい場合は現在時刻を使った値((uint)gc.CurrentTimestamp*1024)を入れます
・gc.ClearScreen();//画面をクリアします。
・gc.SetColor(int,int,int);//描画色を指定します。(RGBの順で0~255を指定)
・gc.SetFontSize(int);//文字の大きさを指定します。
・gc.DrawString(string,int x,int y);
・座標(x,y)に文字列を描画するメソッドです。
9行目(クラスに入った直後)に変数の宣言を記載
int money;
const int CARD_TYPE = 10;
int[] card_count = new int [CARD_TYPE];
string[] card_name =
{"A","B","C","D","E","F","G","H","I","J"};
bool isComplete;
int new_card ;
22行目(InitGame()の中)に初期化処理を記載
gc.ChangeCanvasSize(720, 1280);
gc.SetRandomSeed((uint)gc.CurrentTimestamp*1024);
money = 10000;
for (int i = 0; i < CARD_TYPE; i++) {
card_count[i] = 0;
}
isComplete = false;
new_card = -1;
35行目(UpdateGame()の中)に下記を記載
if (gc.GetPointerFrameCount(0)==1 && ! isComplete) {
money -= 100;
new_card = gc.Random (0, 9);
card_count[new_card]++;
isComplete = true;
for (int i = 0; i < CARD_TYPE; i++) {
if (card_count [i] == 0) {
isComplete = false;
}
}
}
54行目(DrawGame()の中)に下記行を記載
gc.ClearScreen();
gc.SetColor(0,0,0);
gc.SetFontSize(36);
gc.DrawString("money:"+money,60, 40);
if(new_card >= 0){
gc.DrawString("new:"+card_name[new_card],60, 80);
}
for(int i=0 ; i< CARD_TYPE ; i++){
gc.DrawString(card_name[i] + ":" + card_count[i],60, 120+i*40);
}
if(isComplete ){
gc.DrawString("complete!!",60, 520);
}
//UpdateGameの最後の方にif文を追加
if(gc.GetPointerFrameCount(0) >= 120){
resetValue()を呼ぶ;
}
//Drawの後、クラスを閉じる括弧の前にメソッドを追加
void resetValue()
{
//InitGameに書いている初期化処理を書く
}
//メソッドを足したら、InitGame内はresetValue();のみに変更。
if(25%の確率(ランダムで0~3の結果が0だったら)){
new_card = ランダムで0~4;
}
else {
new_card = ランダムで5~9;
}
など。
isComplete = false;
for (int i=0; i<5;i++) {
if (card_count [i] が5以上だったら) {
isComplete = true;
}
}
もしくは、AかBかCかDかEが5以上だったらtrue、という書き方でも。MonoDevelop上でビルドエラーが31個出ている、という場合はこれに該当するものと思われます。
MonoDevelop上ではエラーが出ますが、プログラム自体に問題なければ、Unity上では動きます。
Unity上で再生ボタンを押してみてください。うまく動くかもしれません。
動かない場合はUnityのConsole窓に出ているエラー内容を確認してみましょう。
プログラムが間違っていてビルドエラーが出ている可能性が高いです。
エディタ上でbuildしてみましょう。
{}の対応が間違っていないか、全角スペースが入っているかなど、確認してみましょう
windows10で、画面タップが有効になっている環境の方は、クリックではなく画面タップしてみましょう。反応があるのではないかと思います。
一部のバージョンのgameCanvasではデフォルトの文字色が白、背景色も白なので、何も見えません。
一部のgameCanvasではデフォルトの文字色が白、背景色も白です。
背景に画像を表示させる、文字色を変更するなどで解決可能です。