20200223のC#に関する記事は2件です。

初心者がUnity2Dでゲーム作ってみた記録

目次

作ったもの
ざっくり設計・機能
学び
おわりに

作ったもの

3_unity_MC_title.png

まほうのクッキング | unityroom
リンク先で遊べます。PC推奨、スマホなどでも一応動作はするようですがサポート外のためデザインが崩れます。
イラストなど諸々込で制作期間2週間、制作時間15時間ちょいくらい。完成したのは11月頃。修正してから書こうと思っていたら他が立て込んでいつのまにやら2月になってた。後回し良くない……。

ゲーム概要

子ども向け。遊びに来るお客さんのためにケーキを作ろう!というストーリー。ヒントからお客さんは誰か・使うべき食材は何か考え、調理パートで食材を選ぶ。選んだ食材によって完成するケーキが変化し、クリア分岐します。

ざっくり設計・機能

magic_cooking.png
スクリプト一覧 | Git

〆切的にイラストが間に合わなそうで諦めたけどお客さんをランダムに設定したかったところ。
主に頑張ったのはケーキ土台とトッピングを数種用意し、選んだ食材によってケーキの完成図を変化させる部分。
3_unity_MC_select.png
3_unity_MC_cake2.png

「これでつくる」ボタンに変数を用意。食材を選ぶと、インスペクターで指定した値分「これでつくる」の変数を変化させるメソッドを呼ぶ仕様。

↓一部抜き出し

「これでつくる」ボタン側スクリプト
Judge
    public int which_cake = 0;
    public int whichi_decoration = 0;

   //食材側で呼び出される、判定値を変更
    public void Pc1()
    {
        which_cake += 1;
        Debug.Log("which_cake: " + which_cake);
    }

    public void Pw1()
    {
        whichi_decoration += 1;
        Debug.Log("whichi_decoration: " + whichi_decoration);
    }
   void OnMouseDown()
    {
        if(which_cake == 7)
        {
            cake_freshcream.SetActive(true);
        }
        else if(which_cake == 17)
        {
            cake_chocolate.SetActive(true);
        }
        else
        {
            cake_failed.SetActive(true);
        }

        if (whichi_decoration == 3 && (which_cake == 7 || which_cake == 17))
        {
            banana.SetActive(true);
            strawberry.SetActive(true);
            P.SetActive(true);
        }
        else if (whichi_decoration == 1 && (which_cake == 7 || which_cake == 17))
        {
            banana.SetActive(true);
            P.SetActive(true);
        }

        else if(whichi_decoration == 2 && (which_cake == 7 || which_cake == 17))
        {
            strawberry.SetActive(true);
            C.SetActive(true);
        }
        else
        {
            B.SetActive(true);
        }
    }

食材側スクリプト
Judge
   //足す値をインスペクター上で指定
    public int plus = 1;

    void OnMouseDown()
    {
        //ループ用の変数を定義
        int p = plus;

        //+値が0になるまでJudgeで足す
        while (p != 0)
        {
            judger.GetComponent<Judge>().Pc1();
            --p;
        }

        this.gameObject.SetActive(false);
    }

ハマった問題

他オブジェクトのスクリプトから値を変化させる方法

共有する変数が記述されたクラスA
 public static int a = 0
利用側
 A.a = 0

上記のようにpublicかつstaticな変数であればクラス外からもアクセスでき、異なるシーン間でも共有することができる。またクラス外からも値を変更できます。ただしエラーのもとのためprivateにして、プロパティで操作するのが原則らしい。
今回はそもそも他オブジェクトのスクリプトから値を変化させないことで解決しました。

プロパティについては↓
プロパティ - C# プログラミング ガイド | Microsoft Docs
プロパティ?フィールド?メンバー?C#のクラス構造のおさらい

学び

  • ハマったとき、どうしてもその方法に限る場合を除いて別手段を検討する
  • その方法に限る場合早めに人に聞いてみる
  • 後々まとめることを念頭にキャプチャなどを残しておくと未来の自分が喜ぶ。

おまけ

制作前の自分用ざっくりメモ
IMG_3458.JPG

おわりに

見ていただきありがとうございました!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GitHub ActionsでNukeeperを使う

C#のプロジェクトで参照しているnugetパッケージを更新してPRを作成してくれるNukeeper便利ですよね。
でもどうせなら定期的に自動的に実行してほしいです。

なのでGitHub Actionsで実行する設定を作ってみました。
(最初、Marketplaceにないかなーと探したんですが、まだないようです…)

↓こんな感じ

nukeeper.yml
name: Nukeeper

on:
  schedule:
    - cron: '0 0 * * 6'
jobs:
  dotnet:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/setup-dotnet@v1.4.0
    - run: |
        dotnet new manifest
        dotnet tool install nukeeper
        dotnet nukeeper repo https://github.com/${{ github.repository }} ${{ secrets.GitHubToken }}
  • 毎週日曜00:00に実行するように設定してますので、適宜変更してください
    • (GitHub ActionsはJenkinsみたいにHないのね…皆一斉に動いて大丈夫かしら?)
  • Nukeeperを動かすために.Net Coreをセットアップしています
  • Nukeeperをローカルインストールするためにマニフェストを生成しています
    • グローバルインストールではパスを通したりでセッションを再起動する必要があるっぽい?ためローカルインストールにしています
  • チェックアウトしてカレントパスを指定すれば動くかな?と思ったんですが、動かず…
    • リポジトリパスを設定する方式にしています
  • GitHub Actionsではデフォルトでgithub.tokenでトークンが取れるんですが、どうも何かの権限が足らないようで動きません
    • 別途repoにアクセス権のあるトークンを生成し、リポジトリのトークンに設定する必要があります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む