2014-03-01 80 views
1

因此,我開始了一種自上而下的2D RPG類遊戲,用自由形式的運動而不是大型網格特定的運動。我有一個「基本人穿過屏幕與瓷磚地圖相撞」。但是,當我用對角線對撞機撞擊一塊瓷磚時,我放慢了速度。在Unity中,如何在對角線上對角線自動滑動?

我似乎這樣做:

Wrong

當我應該這樣做:

Right

我的代碼是非常簡單和準系統。在大部分時間在互聯網上搜索完這些內容之後,我想出了這種解決方案,但這種解決方案不起作用。

void FixedUpdate() 
{ 
    float moveHorizontal = Input.GetAxisRaw("Horizontal"); 
    float moveVertical = Input.GetAxisRaw("Vertical"); 

    Movement = new Vector2(moveHorizontal, moveVertical); 
    Movement.Normalize(); 
    rigidbody2D.velocity = Movement * Speed; 
} 


void OnCollisionEnter2D(Collision2D other) 
{ 
    Normal = other.contacts[0].normal; 
    rigidbody2D.velocity -= Normal * Vector2.Dot(rigidbody2D.velocity, Normal); 
} 

我在做什麼錯?我想這是一個相對標準的問題,因爲在平臺遊戲中沿着對角線或斜坡滑動在遊戲中很常見。

+0

嗯,我不知道這會幫助太多。此外,似乎無論我在碰撞時如何設置速度,FixedUpdate循環都會覆蓋它。 – user961794

回答

0

我終於解決了這個!我的直覺是正確的:我正在反思它。

第1步:刪除所有上面的代碼示例的,只是有一個簡單的:

void FixedUpdate() 
{ 
    float moveHorizontal = Input.GetAxisRaw("Horizontal"); 
    float moveVertical = Input.GetAxisRaw("Vertical"); 

    movement = new Vector2(moveHorizontal, moveVertical); 
    movement.Normalize(); 
    rigidbody2D.velocity = movement * Speed; 
} 

步驟2:在您的資產文件夾,進入創建> Physics2DMaterial。創建一個。

步驟3:點擊您的新材料,然後根據需要調用它。我稱它爲「無摩擦」。將摩擦設置爲0,並確保「反彈」爲0.

第4步:將您的新材料拖放到公式中涉及的任何對象中的任何「物理材質(2D)」字段。

你完成了!