質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2267閲覧

Unity C#で攻撃をするとダメージを与えるシステムを作っております。

sho0

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/05/09 09:21

編集2020/05/09 10:54

前提・実現したいこと

ランダムエンカウント後にランダムにモンスターをインスタンス化してバトルをしたいのですが、下記の内容で困っています。

C#で攻撃をするとダメージを与えるシステムを作っております。

恐らく、Random.Rangeでランダムにプレハブをインスタンス化している所が下記の原因だとは思うのですが、
イメージ説明
イメージ説明
public Enemy enemy;記載時に下記の問題がおきました。

発生している問題・エラーメッセージ

インスペクター上で設定出来る様にしているのですがEnemy側は設定できません。
イメージ説明

エラーメッセージ

エラーコードはなし

該当のソースコード

TrainScript1

1using UnityEngine; 2using System.Collections; 3public class TrainScript1 : MonoBehaviour 4{ 5public GameObject[] Train; 6 7void Start () 8 { 9 10 11 12int number = Random.Range (0, Train.Length); 13Instantiate(Train[number],transform.position,transform.rotation); 14 15 } 16}

該当のソースコード

Enemy

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Enemy : MonoBehaviour 6{ 7[SerializeField] 8 private int maxHp; 9 10 private int hp; 11 12 [SerializeField] 13 public int atk; 14 15 [SerializeField] 16 private int speed; 17 18 19 // Start is called before the first frame update 20 private void Start() 21 { 22 hp = maxHp; 23 } 24 25 // Update is called once per frame 26 public int MyHp 27 { 28 get 29 { 30 return hp; 31 } 32 private set 33 { 34 hp = value; 35 } 36 } 37 38 // 持っているスキル 39[SerializeField] 40private List<Skill> skillList = null; 41 42public void SetSkillList(List<Skill> skillList) { 43 this.skillList = skillList; 44} 45 46public List<Skill> GetSkillList() { 47 return skillList; 48} 49 50public int MyAtk 51 { 52 get 53 { 54 return atk; 55 } 56 private set 57 { 58 atk = value; 59 } 60 } 61 62 public int MySpeed 63 { 64 get 65 { 66 return speed; 67 } 68 private set 69 { 70 speed = value; 71 } 72 } 73 74 public void OnDamage(int _damage) 75 { 76 hp -= _damage; 77 } 78} 79

該当のソースコード

Batlle

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Batlle : MonoBehaviour 6{ 7public Player player; 8public Enemy enemy; 9 // Start is called before the first frame update 10 void Start() 11 { 12 13 } 14 15 // Update is called once per frame 16 void Update() 17 { 18 19 } 20 public void PushAttackButton() 21 { 22 enemy.OnDamage(player.atk); 23 24 } 25} 26

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kozuchi

2020/05/09 09:32

タグに Unity を追加したほうがいいと思います。(おそらくタイトルにも) このタイトルでは単なる C# の質問と思われて Unity に詳しい人にスルーされる可能性があります。
BluOxy

2020/05/09 09:41 編集

タグにUnityを追加してください。 また、質問内容がよくわかりませんでした。推測ですが「インスペクタ上でBatlleスクリプトにEnemyスクリプトをアタッチできないのは何故か」が質問でしょうか。 質問のタイトルを見て、その質問内容が分かるようタイトルを修正してください。
sho0

2020/05/09 10:56

kozuchiさん ありがとうございます。 記載しました。
sho0

2020/05/09 10:59

BluOxyさん Unityの記載をしました。 また質問内容は推測の通りです。 かしこまりました公式のドキュメントも参考にいたします。
guest

回答1

0

ベストアンサー

こんにちは。
質問への追記・修正の依頼のログをみたところ

「インスペクタ上でBatlleスクリプトにEnemyスクリプトをアタッチできないのは何故か」

が質問内容だと推測されましたので、その点に関して回答致します。

"Player"GameObjectにアタッチされている
"doragonPrefab","kenPrefab","kisiPrefab"は
TrainScript1Start()関数でゲーム実行中にHierarchy上に作成されます。
そのため、ゲームを実行していないときにHierarchy上のBattleにドラッグアンドドロップでアタッチすることが出来ません。

この場合はスクリプト上でBattleenemy変数に各PrefabのEnemyをセットしてあげる必要があります。
下記の例ではTrainScript1Battleにアタッチしておき
Enemyを作成時にアタッチしているBattleに設定しています。

cs

1public class TrainScript1 : MonoBehaviour 2{ 3 public GameObject[] Train; 4 public Batlle battle; 5 6 void Start() 7 { 8 int number = Random.Range(0, Train.Length); 9 var enemyObject = Instantiate(Train[number], transform.position, transform.rotation); 10 battle.enemy = enemyObject.GetComponent<Enemy>(); 11 } 12}

イメージ説明

投稿2020/05/10 22:56

YASU_jrt

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sho0

2020/05/11 02:40

回答ありがとうございます。 試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問