LoginSignup
9
2

More than 3 years have passed since last update.

C#&Unityの演習問題:しまづ君にプログラミングを教えよう!パート4【スタジオしまづアカデミア】

Last updated at Posted at 2020-03-04

(ベータ版:いいねと思ったらtwitterに投稿してもらえると嬉しいです^^)
(おすすめの問題があれば、編集リクエストで追加していただけると助かります)

前回:https://qiita.com/simanezumi1989/items/a616040403d599333a70

これはあなた自身の物語です

ときは戦国、、、
ゲーム開発をするためにプログラミングを学び始めたしまづ君(永遠の3才)。
ところが彼はまだまだプログラミングのことがわかっていません。
のちに世界を救うこととなる「スタジオしまづ」設立のために彼にプログラミングを教えましょう!

演習問題を行う前の準備:困った人向け

スタジオしまづのYouTube
スタジオしまづの学習サイト

補足:クラスについて

クラスとは
・変数と関数を合わせたもの

ゲーム内に再現したいものがあるとき、下のように、変数と関数の組み合わせを考えれば実現できる
スクリーンショット 2020-03-04 15.49.29.png
(理想的なクラスを作るには、どのクラスにどんな機能/管理/責任を持たせるかが重要となる。 人に太陽の動きを管理させるのはおかしいように)
・クラスの生成に関して、Unityの場合は通常のC#と生成方法が違います。今回はUnity版のクラス生成で行います。

演習問題:他クラスの関数(メソッド)の利用

しまづくん:Playerクラスってのを作ってみたんだけど、どうやったらAttack関数をQuestionで使えるの?UnityエディタでQuestionには持ってきたんだけど、、、

しまづ君のコード

Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    public Player player;

    void Start()
    {
        //ここでPlayerのAttack関数を実行したい
    }
}
Player.cs
using UnityEngine;

public class Player : MonoBehaviour
{
    int hp;

    void Attack()
    {
        Debug.Log("攻撃");
    }
}

しまづ君のプロジェクト
スクリーンショット 2020-03-04 18.32.19.png

スクリーンショット 2020-03-04 18.33.17.png

スクリーンショット 2020-03-04 18.33.14.png

パッケージから環境を設定したい方:こちら
パッケージのインポート方法:こちら(準備中)

---解答ルパン---

Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    public Player player;

    void Start()
    {
        player.Attack();
    }
}

Player.cs
using UnityEngine;

public class Player : MonoBehaviour
{
    int hp;

    public void Attack()
    {
        Debug.Log("攻撃");
    }
}

しまづ君:ありがとう!〇〇がわかったよ^^(わかった方は編集リクエストお願いします)

演習問題:public関数

しまづくん:PlayerクラスにDamage関数も作ったんだけど、エラーが出ちゃった。。。どうすればいいかな?
スクリーンショット 2020-03-04 18.47.22.png

(解答ルパン:わからなかったら検索しようよ、しまづくん、、、)

状況は"演習問題:他クラスの関数(メソッド)の利用"と同じ

しまづ君のコード

Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    public Player player;

    void Start()
    {
        player.Attack();
        player.Damage(10);
    }
}
Player.cs
using UnityEngine;

public class Player : MonoBehaviour
{
    int hp;

    public void Attack()
    {
        Debug.Log("攻撃");
    }

    void Damage(int damage)
    {
        hp -= damage;
        Debug.Log(hp);
    }
}

---解答ルパン---

Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    public Player player;

    void Start()
    {
        player.Attack();
        player.Damage(10);
    }
}

Player.cs
using UnityEngine;

public class Player : MonoBehaviour
{
    int hp;

    public void Attack()
    {
        Debug.Log("攻撃");
    }

    public void Damage(int damage)
    {
        hp -= damage;
        Debug.Log(hp);
    }
}

しまづ君:ありがとう!〇〇がわかったよ^^(わかった方は編集リクエストお願いします)

演習問題:public変数

しまづくん:さっきと同じ状況で、playerのhpをQuestionで使おうと思ったんだけど、またエラーが出ちゃった^^;どうすればいいかな?

状況は"演習問題:他クラスの関数(メソッド)の利用"と同じ

しまづ君のコード

Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    public Player player;

    void Start()
    {
        int hp = player.hp;
        Debug.Log(hp);
    }
}
Player.cs
using UnityEngine;

public class Player : MonoBehaviour
{
    int hp;

    public void Attack()
    {
        Debug.Log("攻撃");
    }

    public void Damage(int damage)
    {
        hp -= damage;
        Debug.Log(hp);
    }
}


---解答ルパン---

Question.cs
using UnityEngine;

public class Question : MonoBehaviour
{
    public Player player;

    void Start()
    {
        int hp = player.hp;
        Debug.Log(hp);
    }
}
Player.cs
using UnityEngine;

public class Player : MonoBehaviour
{
    public int hp;
    public void Attack()
    {
        Debug.Log("攻撃");
    }

    public void Damage(int damage)
    {
        hp -= damage;
        Debug.Log(hp);
    }

    // あるいはプロパティってものを作ったり
    /*
    public int HP
    {
        get { return hp; }
        set { hp = value; }
    }
    関数で渡すこともある
    public int GetHP()
    {
        return hp;
    }
    */
}

しまづ君:ありがとう!〇〇がわかったよ^^(わかった方は編集リクエストお願いします)

クラス以外にも構造体ってものがあるんだけど、使い方はクラスと似てるから困ることはないと思います。
・スタジオしまづYouTube:Unity特有のクラスについて紹介するぞ!

つづき

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2