注私Game Objects
の一つである:私は使用してゲームオブジェクト ごとに特別のC#を作成することによってこれを行うことができますOnmouseDownメソッドしかし、私はこれを1つのスクリプトファイル に添付してプレイヤーに追加します。
これは問題ではありません。 2つのスクリプトを相互に通信させることができます。
方法1:
他のスクリプトからのクリックアクションがある場合にPlayerController
スクリプトを通知します。
各ゲームオブジェクトにクリックを検出するようにアタッチします。あなたのPlayerController
スクリプトにクリックされたGameObjectを送信します。
public class ClickDetector: MonoBehaviour
{
PlayerController playerController;
void Start()
{
playerController = GameObject.Find("GameObjectPlayerControlIsAttachedTo").GetComponent<PlayerController>();
}
void OnMouseDown()
{
//Notify our PlayerController script that there was a click
playerController.OnGameObjectClicked(this.gameObject);
}
}
PlayerController
スクリプトにこれを追加します。クリックされたGameObjectを受け取ります。 GameObject name
またはtag
と比較することができます。私はあなたがtag
と行くことをお勧めします。
public class PlayerController: MonoBehaviour
{
public void OnGameObjectClicked(GameObject objClicked)
{
Debug.Log("There was a click from: "+objClicked.name);
if (objClicked.CompareTag("right"))
{
//Your code
}
else if (objClicked.CompareTag("left"))
{
//Your code
}
else if (objClicked.CompareTag("up"))
{
//Your code
}
}
}
方法2:
1つのスクリプト(PlayerController
)内のすべてを行います。
raycast
を使用できます。どのゲームオブジェクトがクリックされたかを比較するにはtag
を使用することをお勧めします。エディタから3つのタグ(right
、left
、up
)を作成し、各ゲームオブジェクトを右にtag
とします。タグを使用しない場合は、if (rayCastHit.collider.CompareTag("up"))
をif (rayCastHit.collider.name=="up")
に置き換えることができます。
void Update()
{
//Check if Mouse Button is pressed
if (Input.GetMouseButtonDown(0))
{
//Raycast from mouse cursor pos
RaycastHit rayCastHit;
Ray rayCast = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(rayCast, out rayCastHit))
{
if (rayCastHit.collider.CompareTag("right"))
{
//Your code
}
else if (rayCastHit.collider.CompareTag("left"))
{
//Your code
}
else if (rayCastHit.collider.CompareTag("up"))
{
//Your code
}
}
}
}
EDIT:
あなたの質問、を更新した後、あなたが動作するようにレイキャストのためにあなたのゲームオブジェクトに衝突型加速器を添付する必要があります。 3つのGameObjectのそれぞれにBox Collider 2Dを添付してください。また
、これは2Dスプライト、メソッドのコードであるため、2が少し変更されます。あなたはVirtual JoyStickとあなたを必要とするよう
if (Input.GetMouseButtonDown(0))
{
Vector2 ray = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D rayHit = Physics2D.Raycast(ray, Vector2.zero);
if (rayHit)
{
if (rayHit.collider.CompareTag("up"))
{
}
}
}
最後に、あなたがやっていることから、それは見えます現在それは間違っている。現在のソリューションはうまくいくはずですが、これを行う正しい方法はUIシステム(Image
コンポーネント)です。
あなたの**メソッド2 **を使用しました。私は自分のゲームオブジェクト用の新しいタグを定義しています。自分のコードを私のプレーヤーに接続されたPlayerControllerスクリプトファイルの中にコピーしました。右手左をクリックしてゲームオブジェクトをクリックしても何も起こらなかった/チェックタグ用の各条件の中にDebug.Logを書き込む –
そして私は**方法1 **をテストした。 –
これは本当に簡単です。 **両方の方法があなたにとってうまくいかない場合、あなたは何か間違っています。クリックして検出したいGameObjectの1つを選択してください。それのスクリーンショットを投稿し、それに添付されたコンポーネントがどのように見えるかを投稿してください。 – Programmer