2016-04-03 5 views
0

Я создал несколько одинаковых довальных клонов like that., и я хочу уничтожить один из них, который я выбираю.Выбор конкретного сборного блока

Прежде всего я использовал raycast2d для обнаружения удара и collied с сборного эффектом

if(Input.GetMouseButtonDown(1)) 

     { 
      RaycastHit2D hit = Physics2D.Raycast (Camera.main.ScreenToWorldPoint((Input.mousePosition)), Vector2.zero); 
      if(hit.collider != null && hit.collider.gameObject==gameObject){ 


       health-=PlayerScript.damage; 

       if(health<=0){ 

        Destroy(hit.collider.gameObject); 
       } 

      } 
     } 

этот сценарий все здоровья префабы. Поэтому я решил создать игровой объект с коллайдером, и если этот игровой объект столкнулся с prefab, prefab потеряет здоровье, а затем уничтожит. я создаю экземпляр объекта игры, как этого

GameObject object=Instantiate(selectOb,Camera.main.ScreenToWorldPoint(Input.mousePosition), Quaternion.identity) as GameObject; 

И я проверить, есть ли столкновение между объектом игры и сборным с ничтожной OnCollision2DEnter().

Теперь есть другая проблема. Игровой объект не связан с другим сборником, потому что area sizes of collider

Надеюсь, я мог бы описать свои проблемы. Я ждал вашего совета о выборе конкретных PREFAB или моих столкновения проблемы

+0

Во-первых, 'prefab' - это что-то в ваших активах, а не в сцене (это только формальная вещь, не связанная с вашей проблемой). Ваш сценарий raycast на каждом экземпляре вашего сборника? Если это так, вы должны изменить это на выделенный игровой объект (какой-то контроллер). В противном случае каждый клон выполнит этот скрипт, где вам потребуется только одно выполнение. –

+0

Да, сценарий raycast присутствует в каждом экземпляре моего prefab.I пытался добавить контроллер bool, который активировал OnMouseOver, и если контроллер bool был прав, объект теряет здоровье. но опять же другие клоны теряют здоровье, и когда мышь над ними, они уничтожаются. Не могли бы вы дать совет о контроллере сортировки? потому что, что бы я ни пытался, он не работал. – yatagac

ответ

0

Что-то вроде этого на GameObject в сцене (возможно пустой GameObject, который служит в качестве контроллера):

Обратите внимание, что направление raycast должно быть -Vector2.up, если вы используете ориентацию камеры по умолчанию.

public class RayShooter : MonoBehaviour 
{ 
    void Update() 
    { 
     if(Input.GetMouseButtonDown(1))  // 1 is rightclick, don't know if you might want leftclick instead 
     { 
      RaycastHit2D hit = Physics2D.Raycast (Camera.main.ScreenToWorldPoint((Input.mousePosition)), -Vector2.up); 
      if(hit.collider != null) 
      { 
       GameObject target = hit.collider.gameObject; 
       target.GetComponent<Enemy>().dealDamage(PlayerScript.damage); 
       // "Enemy" is the name of the script on the things you shoot 
      } 
     } 
    } 
} 

На вещи, которые вы стрелять (здесь называется «Enemy»):

public class Enemy : MonoBehaviour 
{ 
    int health = 10; 

    public void dealDamage(int value) 
    { 
     health -= value; 
     if(health <= 0) 
     { 
      Destroy(gameObject); 
     } 
    } 
} 

Это было бы очень простой установки, очевидно, ваши вещи, чтобы стрелять нужно коллайдер для этой работы. Кроме того, может быть хорошей идеей включить слои и layermask в raycast.

+0

благодарит за помощью. – yatagac

Смежные вопросы