2017-02-08 64 views
3

我正在Unity 2D中進行非常基本的測試。我遇到的問題是當我的精靈與地面碰撞時,它經常會頻繁地檢查事件,所以精靈會一直處於陷阱狀態。它沒有機會離開地面,直到檢查結果告訴它轉身,導致它快速上升和下降。 在下面夾如圖所示:插值對象碰撞卡住

https://m.youtube.com/watch?v=gPmmLjGe9iQ

我想,當接觸時精靈需要改變它的Y軸方向。請參閱下面的代碼。

void Update() { 
    hitWall = Physics2D.OverlapCircle(wallCheckUp.position, wallCheckRadius, whatIsWall); 
    if (hitWall) 
    { 
     moveUp = !moveUp; 
    } 

    if (moveUp) 
    { 
     transform.localScale = new Vector3(-1f, 1f, 1f); 
     GetComponent<Rigidbody2D>().velocity = new Vector2(speed, GetComponent<Rigidbody2D>().velocity.x); 
    } 
    else 
    { 
     transform.localScale = new Vector3(1f, 1f, 1f); 
     GetComponent<Rigidbody2D>().velocity = new Vector2(-speed, GetComponent<Rigidbody2D>().velocity.x); 
    } 
} 

如果需要更多信息,請讓我知道。

編輯

爲了讓我更清晰,請參閱我的精靈設置。

enter image description here

+0

難怪爲什麼你完全濫用'Rigidbody'(手動設置'velocity'),請查看如何正確使用它的文檔。 – Aybe

+0

會不會,我還在學習。我從一個在線教程中得到了這個基礎,但它是用於左右移動的,我已經修改過嘗試去獲得我需要的東西。 – Phil3992

+0

基本上你只應該在'Rigidbody'中使用'Add *(Vector3)'方法,給所需的布丁分配一個'PhysicsMaterial',然後根據你的需要調整它。 – Aybe

回答

1

OverlapCircle檢查任何重疊,所以如果只要有它和對象之間的重疊,這將是真實的,從而運行你的if語句對於每一幀,這是真的。嘗試使用方法OnCollisonEnter2D或OnTriggerEnter2D(只需更換方法的名稱):

void OnCollisionEnter2D(Collision2D coll) 
{ 
    moveUp = !moveUp; 
    if (moveUp) 
    { 
     transform.localScale = new Vector3(-1f, 1f, 1f); 
     GetComponent<Rigidbody2D>().velocity = new Vector2(speed, GetComponent<Rigidbody2D>().velocity.y); 
    } 
    else 
    { 
     transform.localScale = new Vector3(1f, 1f, 1f); 
     GetComponent<Rigidbody2D>().velocity = new Vector2(-speed, GetComponent<Rigidbody2D>().velocity.y); 
    } 
} 

另外,還要確保你的對象在每個檢查員有Collider2D。

還有一件事。初始化Vector2時,參數的順序是x,y。我注意到在你的代碼中,你在y(垂直)組件的參數中使用了GetComponent()。velocity.x(horizo​​ntal)。如果你的精靈正在上下移動,那麼這可能是你的錯誤的原因,因爲它的y分量沒有改變(除非你有其他的代碼改變了x分量)。

所以,你想改變

new vector2(speed[-speed], GetComponent<Rigidbody2d>().velocity.x) 

new vector2(GetComponent<Rigidbody2d>().velocity.x, speed[-speed]) 

希望這有助於。

+0

編輯:固定代碼,因爲我不小心把一個額外的關閉支架 –

+0

啊,對不起。我會嘗試找到另一種解決方案。一個問題是,精靈是上下左右移動的嗎? –