質問: string.Format( "Score:{0}", score ); } } ``` ### 問題点 ・上のスクリプトでは”Player”から発射される”Bullet”が”Enemy”タグのオブジェクトに当たったら+150、”Enemy”が”Player”に当たったら-100として動作させたいスクリプトです。 ・しかし、どこに”Bullet”の文を挿入すればいいのかがわかりません。 ・ぜひお力添えいただきたいです。 ### 下記のサイトを参考にさせていただきました。 リンク内容テキスト関係 リンク内容スクリプト 追記:BulletがEnemyに衝突すると消えるスクリプトは挿入済みです。
回答: 「ポイントのような感じで」「ポイントとして反映」とは具体的に何がしたいのか分からないので、とりあえず「衝突したら何か起こる」という点のみ指摘を。 `OnCollisionEnter`は「このスクリプトが付いているオブジェクトと何かがぶつかったら発動」するメソッドです。 つまりBulletオブジェクトにScoreスクリプトを付けて動作させ、そのBulletオブジェクトが何かにぶつかったらOnCollisionEnterが呼ばれます。 (「リンク内容スクリプト」の質問内でedo_m18さんが挙げていたのはこれのこと) ですが実際にBulletオブジェクトにScoreスクリプトを付けたら、Bulletを発射する度にスコアが0に戻ってしまいます(`Start`メソッドで`score = 0;`している為)。 なので「スコアを管理するスクリプトと衝突を検知するスクリプトを分ける」という考え方が必要になります。 ``` //スコアを管理するスクリプト(シーン内に1つだけ存在する名前のオブジェクトに付ける) public class Score : MonoBehaviour { public Text scoreText; //Text用変数 private int score = 0; //スコア計算用変数 void Start() { score = 0; SetScore(); //初期スコアを代入して表示 } //OnCollisionEnterから変更、当たったオブジェクトのタグを渡される public void HitBullet( string hittag ) { if( hittag == "Enemy" ) { score -= 150; } else { score += 100; } SetScore(); } void SetScore() { scoreText.text = string.Format( "Score:{0}", score ); } } //Bulletが衝突した時のスクリプト(Bulletオブジェクトに付ける) //「BulletがEnemyに衝突すると消えるスクリプト」が似たような内容のはずなので、一緒にしてもいいかも public class BulletHit : MonoBehaviour { private Score scoreComp; //Scoreコンポーネント void Start() { //シーン内にあるScoreコンポーネントを確保 scoreComp = GameObject.Find("Scoreコンポーネントが付いているオブジェクト名").GetComponent(); } //衝突時処理:Scoreコンポーネントの衝突時メソッドにタグを渡す void OnCollisionEnter( Collision collision ) { scoreComp. HitBullet(collision.gameObject.tag); } } ```