今天做2D遊戲使用了Physics2D.Linecast函數,爲了使物體不會撞進牆。
RaycastHit2D hit = Physics2D.Linecast(targetPosition, targetPosition + new Vector2(x, y));
x,y值不是1就是-1,因爲使用這個函數的腳本所在的物體本身也使用了BoxCollider2D
所以在檢測的時候把自己也給檢測了,所以加了排除語句:
if (hit.collider.tag == "Food" || hit.collider.tag == "Soda" || hit.collider.tag == "Enemy")
{
targetPosition += new Vector2(x, y);
}
然後發現還是會撞進牆內,後來按照視頻在檢測的時候把自身的Collider禁用了。
檢測後再續用:
collider.enabled = false;
RaycastHit2D hit = Physics2D.Linecast(targetPosition, targetPosition + new Vector2(x, y));
collider.enabled = true;
發現就不會有問題了,這裏我猜測是linecast函數一旦檢測到第一個碰撞體之後就會停止檢測。
所以把自身檢測進去之後就不會檢測牆了。估計Physics.Raycast函數也有此性質,這裏要注意一下。