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

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

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

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

Unity

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

Q&A

解決済

2回答

10807閲覧

対象に衝突したときにスコアを反映させたい

dcuser879

総合スコア11

C#

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

Unity

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

0グッド

0クリップ

投稿2018/07/23 07:17

編集2018/07/23 07:20

Unityでゾンビゲームのようなものを作っています

・スコアをプレイヤーが出した弾が敵(Enemy)に当たった時にポイントのような感じで表示させたいと思っています。

・自分で調べてみても、スコアを表示する方法ばかりで、物が衝突したときにポイントとして反映されるようなスクリプトは見つけることができませんでした。
・現段階としてテキストにScoreとして作っているのであとはスコアを反映させるだけです。
###下記サイトを参考に自分なりに作ってみました

using UnityEngine; using System.collections; using UnityEngine.UI: public class Score : MonoBehaviour { public Text scoreText; //Text用変数 private int score = 0; //スコア計算用変数 void Start() { score = 0; SetScore(); //初期スコアを代入して表示 } void OnCollisionEnter( Collision collision ) { string yourTag = collision.gameObject.tag; if( yourTag == "Enemy" ) { score -= 150; } else { score += 100; } SetScore(); } void SetScore() { scoreText.text = string.Format( "Score:{0}", score ); } }

###問題点
・上のスクリプトでは”Player”から発射される”Bullet”が”Enemy”タグのオブジェクトに当たったら+150、”Enemy”が”Player”に当たったら-100として動作させたいスクリプトです。
・しかし、どこに”Bullet”の文を挿入すればいいのかがわかりません。
・ぜひお力添えいただきたいです。
###下記のサイトを参考にさせていただきました。
リンク内容テキスト関係
リンク内容スクリプト

追記:BulletがEnemyに衝突すると消えるスクリプトは挿入済みです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

「ポイントのような感じで」「ポイントとして反映」とは具体的に何がしたいのか分からないので、とりあえず「衝突したら何か起こる」という点のみ指摘を。

OnCollisionEnterは「このスクリプトが付いているオブジェクトと何かがぶつかったら発動」するメソッドです。
つまりBulletオブジェクトにScoreスクリプトを付けて動作させ、そのBulletオブジェクトが何かにぶつかったらOnCollisionEnterが呼ばれます。
(「リンク内容スクリプト」の質問内でedo_m18さんが挙げていたのはこれのこと)

ですが実際にBulletオブジェクトにScoreスクリプトを付けたら、Bulletを発射する度にスコアが0に戻ってしまいます(Startメソッドでscore = 0;している為)。
なので「スコアを管理するスクリプトと衝突を検知するスクリプトを分ける」という考え方が必要になります。

C#

1//スコアを管理するスクリプト(シーン内に1つだけ存在する名前のオブジェクトに付ける) 2public class Score : MonoBehaviour 3{ 4 public Text scoreText; //Text用変数 5 private int score = 0; //スコア計算用変数 6 7 void Start() 8 { 9 score = 0; 10 SetScore(); //初期スコアを代入して表示 11 } 12 13 //OnCollisionEnterから変更、当たったオブジェクトのタグを渡される 14 public void HitBullet( string hittag ) 15 { 16 if( hittag == "Enemy" ) 17 { 18 score -= 150; 19 } 20 else 21 { 22 score += 100; 23 } 24 25 SetScore(); 26 } 27 28 void SetScore() 29 { 30 scoreText.text = string.Format( "Score:{0}", score ); 31 } 32} 33 34//Bulletが衝突した時のスクリプト(Bulletオブジェクトに付ける) 35//「BulletがEnemyに衝突すると消えるスクリプト」が似たような内容のはずなので、一緒にしてもいいかも 36public class BulletHit : MonoBehaviour 37{ 38 private Score scoreComp; //Scoreコンポーネント 39 40 void Start() 41 { 42 //シーン内にあるScoreコンポーネントを確保 43 scoreComp = GameObject.Find("Scoreコンポーネントが付いているオブジェクト名").GetComponent<Score>(); 44 } 45 46 //衝突時処理:Scoreコンポーネントの衝突時メソッドにタグを渡す 47 void OnCollisionEnter( Collision collision ) 48 { 49 scoreComp. HitBullet(collision.gameObject.tag); 50 } 51}

投稿2018/07/23 08:46

sakura_hana

総合スコア11425

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

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

dcuser879

2018/07/24 01:33

回答ありがとうございます! 説明不足で申し訳ないです。Score スクリプトは、Bulletではなく、GameObject>UI>text 内についており、イメージとして、ちょっとずれてはいますが、”グラディウス”の自機が出した弾が相手に当たりスコアが増えていく(画面内のスコア画面に150、300と倒せば倒すほどスコアが伸びる) そして、相手が自機に当たると、スコアが-100されてしまうということをイメージしています。 ゲームは時間制限制にするのでHPの概念はないです。 もし、お時間がございましたらもう少しお手を貸していただけると幸いです。
sakura_hana

2018/07/24 01:44

であればイメージ通りなので、回答内に書いたコードの内、 ScoreスクリプトとBulletHitスクリプトの2つのスクリプトファイルを作成した上で ScoreスクリプトをScoreオブジェクトへ、BulletHitスクリプトをBulletオブジェクトへ付ければ 希望通りの動きになるかと思います。 (なおスコア増減は元ソースのままにしましたが、「collision.gameObject.tag=当たった相手のタグ」なので多分+-逆だと思います) (「敵と自機が当たった場合」の処理が今無いですが同じ要領で作れます)
dcuser879

2018/09/07 06:42

返信が遅くなって申し訳ないです。 思った通りにスコアが動作することができました! また機会があればお力をお貸ししていただけると幸いです。
guest

0

OnCollisionEnter関数をBulletにつけた方が良さそうです

投稿2018/07/23 08:41

MasujimaRyohei

総合スコア422

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

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

dcuser879

2018/07/24 01:17

回答ありがとうございます! ご意見を参考に頑張ります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問