前提・実現したいこと
常に真横に発射され続けている銃弾(Bullet)を、「↑(上向きの矢印)」ボタン(UpButton)を押せば上向きの軌道・方向に変えられるように、銃弾とボタンのスクリプトを設定したい。
発生している問題・エラーメッセージ
ボタンに効力を持たせるためにコードをアタッチしなければならないのだが、そうした場合ボタン自身がfloat Speed=60で進んでしまう。ボタンを押した場合、ボタンは動かずに、銃弾のみがボタンの効果(public void UpButtonDown())を受けるようにしたい。またボタンを押してない時は常にそのまま(真横に)銃弾が進むようにしたい。
ButtonのInspecterの画像は以下の通りです。


該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class BulletController : MonoBehaviour 7{ 8 public GameObject Bullet; 9 float speed = 60.0f; 10 11 void Update() 12 { 13 transform.position += new Vector3(this.speed * Time.deltaTime, 0f, 0f); 14 } 15 public void UpButtonDown() 16 { 17 transform.position += new Vector3(this.speed * Time.deltaTime, 0.2f, 0f); 18 } 19 private void OnCollisionEnter2D(Collision2D collision) 20 { 21 if (collision.gameObject.tag == "Building") 22 { 23 Destroy(this.gameObject); 24 } 25 if (collision.gameObject.tag == "Enemy") 26 { 27 Destroy(this.gameObject); 28 } 29 } 30}
試したこと
別の銃弾を作成し、別のコードで、別のPrefabで上向きの銃弾を作ってボタンにアタッチしてみたのですが、その場合だと同時に横(真横)向きの銃弾も発射されてしまうので、なんとか1つの銃弾を、ボタンにて自由に上下に動かせるようにしたいです。
補足情報(FW/ツールのバージョンなど)
Unity 2019 3.0 f5
Bulletですが
・public GameObject Bullet;で代入しているオブジェクト
・GameObject.Find("Building");
・GameObject.Find("Enemy");
どれが正しいでしょうか?
質問に質問を返して申し訳ないのですが、Bulletはその3つのコード全ての役割を持っていると思っていたのですが、違うのでしょうか?
izmktrさんも指摘していますが代入時に上書きされていくので「3つのコード全ての役割を持つ」というのは不可能です。
this.Bullet = GameObject.Find("Enemy");
現在はこれのみ適用されています。
BulletなのにEnemyオブジェクトを代入するのは違うのではないかと思っています。
質問の解決には「Buttonに使うクラス」と「Bulletに使うクラス」を分けてしまえば良いのですが、
まずはBulletのオブジェクトを正確に参照出来るようにしないとその修正は無理かと思います。
そうだったんですか
詳しくありがとうございます!
では下2つのコードを消してpublic GameObject Bullet;のみとした場合はどのようにすればいいでしょうか?
回答に書きました。
設定を間違えなければボタンを押している間y方向に0.2づつ上がるかと思います。
