マウスをクリックしたオブジェクトを削除しようとしています。新しいUnity3D 4.3を使用して2Dゲームを作成しています。これが私が使っているコードです
void Update () {
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit))
{
isHit = false;
Destroy(GameObject.Find(hit.collider.gameObject.name));
}
}
}
コントロールは内側のifループに入っていません。 (isHit
はfalseに設定されていません)。
新しい2D要素で3D物理関数を使用することはできません。代わりに 2D functions を使用してください。例:
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
if(hit.collider != null)
{
Debug.Log ("Target Position: " + hit.collider.gameObject.transform.position);
}
この質問は少し古いですが、Unity 2DでマウスクリックしてGameObjectを取得する方法を探していました。Esaからの回答がほとんど役に立ちましたが、動作させる余裕がなかったため、少し調べたところ、Camera.main.ScreenToWorldPointがカメラの画面領域の中心を返し、正しく機能していることがわかりました。カメラと最も近いゲームオブジェクトとのZ位置の差を入力する必要がありました。私のカメラはデフォルトで-10に設定されており、GameObjectは0に設定されていたので、必要なのは、Input.mousePosition.zを10に設定することだけです。以下のコードはあなたを助けるかもしれません:
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10)), Vector2.zero);
if(hit.collider != null)
{
Debug.Log ("Target Position: " + hit.collider.gameObject.transform.position);
}
まず、任意のタイプの2Dコライダーをゲームオブジェクトに接続し、次にそれらのソリューションの1つを選択します。
1番目のケース-複数のゲームオブジェクトが重なり合っており、特定のゲームオブジェクトがクリックされたことを理解しようとする場合:
void Update ()
{
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit2D[] hits = Physics2D.GetRayIntersectionAll (ray, Mathf.Infinity);
foreach (var hit in hits) {
if (hit.collider.name == name) {
MyFunction ();
}
}
}
}
2番目のケース-GameObjectが1つしかなく、クリックされたかどうかを理解しようとする場合:
void Update ()
{
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit2D hit = Physics2D.GetRayIntersection (ray, Mathf.Infinity);
if (hit.collider != null && hit.collider.name == name) {
MyFunction ();
}
}
}
最初にオブジェクトにメッシュコライダー(任意のコライダー)をアタッチして、内側のIfに入ります。そして、
Destroy(hit.collider.gameObject);
単に仕事をします。
このあたりには他の作業があるかもしれません。
void Update () {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit))
{
if(Input.GetMouseButtonDown(0))
{
isHit = false;
Destroy(hit.collider.gameObject);
}
}
}