[英]why does my code not destroy all the objects of a list, and instead it randomly saves some of them? (unity 2d)
[英]Unity 2D touch code destroying all objects?
在尋找可以在Unity中處理觸摸控件的解決方案之后,我發現了一個似乎可行的解決方案。 問題是,當檢測到觸摸時,帶有2D碰撞器的每個對象都會被破壞。 我只希望將被觸摸的對象銷毀。
場景中的每個游戲對象都是預制的。 它們都是8種不同隨機預制件的克隆。 這些預制件均具有Circle Collider 2D以及名為TouchManager.cs的觸摸控制腳本
我嘗試將“ if(hit)”部分更改為“ if(hit.collider!= null),但是由於某種原因,這使其無法正常工作。我已經嘗試了所有我能想到的方法,但沒有任何效果!任何人都可以幫忙?
// Update is called once per frame
void Update ()
{
if (Input.touchCount > 0)
{
if (Input.GetTouch(0).phase == TouchPhase.Began)
{
Vector3 wp = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
Vector2 touchPos = new Vector2(wp.x, wp.y);
Collider2D hit = Physics2D.OverlapPoint(touchPos);
if (hit)
{
touched = true;
startPos = Input.GetTouch(0).position;
}
}
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{
}
if (Input.GetTouch(0).phase == TouchPhase.Ended)
{
if (touched == true)
{
float swipeDirection = Mathf.Sign(Input.GetTouch(0).position.y - startPos.y);
if (swipeDirection > 0)
{
Destroy(gameObject);
}
else if (swipeDirection < 0)
{
}
// Reset touched
touched = false;
}
} //END SWITCH
} //END IF TOUCHED
} //END UPDATE
這里發生的是OverlapPoint返回該點重疊的對撞機,這意味着您正在檢查:如果滑動與任何對撞機重疊,則銷毀該游戲對象。
您要使用hit.collider2D,它將存儲重疊的collider2D。 盡管hit.collider始終為null,這是因為您沒有任何對撞機,而您只有collider2D。
由於OverlapPoint針對所有對撞機進行測試,並且不關心它從何而來,因此最好將其放置在單個管理器對象而不是每個對象中,然后讓該管理器銷毀其他對象。
此代碼將僅破壞一個對象。 請記住將其放置在與要銷毀的物體不同的物體上。 我懷疑它會給您帶來理想的行為,但是由於我不知道那是什么,因此我將其留給您練習。
Vector3 startPos;
GameObject hitObject;
void Update()
{
if (Input.touchCount > 0)
{
if (Input.GetTouch(0).phase == TouchPhase.Began)
{
Vector3 wp = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
Vector2 touchPos = new Vector2(wp.x, wp.y);
Collider2D hit = Physics2D.OverlapPoint(touchPos);
if (hit != null)
{
hitObject = hit.collider2D.gameObject;
startPos = Input.GetTouch(0).position;
}
}
if (Input.GetTouch(0).phase == TouchPhase.Ended)
{
if (hitObject != null)
{
float swipeDirection = Mathf.Sign(Input.GetTouch(0).position.y - startPos.y);
if (swipeDirection > 0)
{
Destroy(hitObject);
}
else if (swipeDirection < 0)
{
}
hitObject = null;
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.