2015-09-09 99 views
1

我正在製作2D TD遊戲,目前我已經使用quill18教程構建了一個簡單的建築系統。但是,我試圖讓它在我的瓷磚上捕捉,因爲我將它們放在它們上面。將gameObject對齊到網格?

這是我的腳本應用到建築物體

void Update(){ 
    Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
    mousePos.z = 0; 
    Vector2 mp = mousePos; 
    this.transform.position = mousePos; 

    Collider2D col = GetComponent<Collider2D>(); 

    if (GameManager.instance.player.CanAffordCurrentBuilding() 
     && !col.IsTouchingLayers(LayerMask.GetMask("NonBuildingLayer")) 
     && col.IsTouchingLayers(LayerMask.GetMask("BuildingLayer")) 
     && !col.IsTouchingLayers(LayerMask.GetMask("BlockingLayer"))) { 
     SpriteRenderer[] sprites = GetComponentsInChildren<SpriteRenderer>(); 
     foreach(SpriteRenderer sr in sprites) 
      sr .color = Color.green; 
     canPlace = true; 
    } 
    else { 
     SpriteRenderer[] sprites = GetComponentsInChildren<SpriteRenderer>(); 
     foreach(SpriteRenderer sr in sprites) 
      sr .color = Color.red; 
     canPlace = false; 
    } 

    if (Input.GetMouseButtonDown (0) && canPlace) { 
     SpriteRenderer[] sprites = GetComponentsInChildren<SpriteRenderer>(); 
     foreach(SpriteRenderer sr in sprites) 
      sr .color = Color.white; 
     Destroy(GetComponent<Rigidbody2D>()); 
     Destroy(this); 
     GameManager.instance.player.BuildingWasPlaced(); 

    } 

這裏做的事情是,如果接觸層是「BuildingLayer」我將能夠把物體與物體總是跟我的鼠標,直到我放好它。但是,我希望它只在觸摸圖層不是BuildingLayer時跟隨我的鼠標。當觸摸圖層是BuildingLayer時,我希望它捕捉到最接近構建圖層的鼠標的圖塊。當我在鼠標周圍移動時不斷更換卡片。

我怎麼能做到這樣的事情? 我有一個名爲網格的列表,其中包含遊戲中的所有建築圖塊(如果有幫助的話)。

回答

0

我在想你可以做的是添加觸發器碰撞箱到你的建築物。 如果您要拖動一個,則使您拖動的那個有一個稍大的觸發器碰撞框。 比檢查對象上是否存在觸發器碰撞,如果是,則捕捉到與碰撞對象相對的位置。您需要檢查碰撞是在底部,左側,頂部還是右側。