(ベータ版:いいねと思ったらtwitterに投稿してもらえると嬉しいです^^)
(おすすめの問題があれば、編集リクエストで追加していただけると助かります)
前回:https://qiita.com/simanezumi1989/items/a616040403d599333a70
#これはあなた自身の物語です
ときは戦国、、、
ゲーム開発をするためにプログラミングを学び始めたしまづ君(永遠の3才)。
ところが彼はまだまだプログラミングのことがわかっていません。
のちに世界を救うこととなる「スタジオしまづ」設立のために彼にプログラミングを教えましょう!
演習問題を行う前の準備:困った人向け
##補足:クラスについて
クラスとは
・変数と関数を合わせたもの
ゲーム内に再現したいものがあるとき、下のように、変数と関数の組み合わせを考えれば実現できる
(理想的なクラスを作るには、どのクラスにどんな機能/管理/責任を持たせるかが重要となる。 人に太陽の動きを管理させるのはおかしいように)
・クラスの生成に関して、Unityの場合は通常のC#と生成方法が違います。今回はUnity版のクラス生成で行います。
##演習問題:他クラスの関数(メソッド)の利用
しまづくん:Playerクラスってのを作ってみたんだけど、どうやったらAttack関数をQuestionで使えるの?UnityエディタでQuestionには持ってきたんだけど、、、
しまづ君のコード
using UnityEngine;
public class Question : MonoBehaviour
{
public Player player;
void Start()
{
//ここでPlayerのAttack関数を実行したい
}
}
using UnityEngine;
public class Player : MonoBehaviour
{
int hp;
void Attack()
{
Debug.Log("攻撃");
}
}
パッケージから環境を設定したい方:こちら
パッケージのインポート方法:こちら(準備中)
---解答ルパン---
using UnityEngine;
public class Question : MonoBehaviour
{
public Player player;
void Start()
{
player.Attack();
}
}
using UnityEngine;
public class Player : MonoBehaviour
{
int hp;
public void Attack()
{
Debug.Log("攻撃");
}
}
しまづ君:ありがとう!〇〇がわかったよ^^(わかった方は編集リクエストお願いします)
##演習問題:public関数
しまづくん:PlayerクラスにDamage関数も作ったんだけど、エラーが出ちゃった。。。どうすればいいかな?
(解答ルパン:わからなかったら検索しようよ、しまづくん、、、)
状況は"演習問題:他クラスの関数(メソッド)の利用"と同じ
しまづ君のコード
using UnityEngine;
public class Question : MonoBehaviour
{
public Player player;
void Start()
{
player.Attack();
player.Damage(10);
}
}
using UnityEngine;
public class Player : MonoBehaviour
{
int hp;
public void Attack()
{
Debug.Log("攻撃");
}
void Damage(int damage)
{
hp -= damage;
Debug.Log(hp);
}
}
---解答ルパン---
using UnityEngine;
public class Question : MonoBehaviour
{
public Player player;
void Start()
{
player.Attack();
player.Damage(10);
}
}
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);
}
}
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特有のクラスについて紹介するぞ!](https://youtu.be/0s8-MiA6kXo)
##つづき
- 超演習問題編:https://qiita.com/simanezumi1989/items/57ee8e80c6364244fb2d
- スタジオしまづの[YouTube](https://www.youtube.com/channel/UCDunz_CPkqkQT5ljKXcYkhg?view_as=subscriber):チャンネル登録お願いします!
- スタジオしまづの[学習サイト](https://d35e.uscreen.io/):特典:Udemyを含む動画教材見放題+オンラインサロンの加入