2017-08-25 68 views
0

我不知道該怎麼做。如果遊戲對象掉下來並與對撞機發生碰撞,則會失去遊戲。我想添加一個功能,向玩家詢問他是否需要再次嘗試,如果是的話,它會反轉一段時間,這樣跌倒的遊戲對象將回到屏幕上,並且允許用戶再次玩。是否有某種時間函數/方法來做到這一點? 希望你明白。如何在Unity遊戲中多做一個嘗試功能

void OnCollisionEnter2D(Collision2D col) { 
    if(col.gameObject.tag=="Collider") { 
     Vector2 checkpoint = new Vector2(transform.position.x, transform.position.y +5) 
    } 
} 

void Reset(){  
    this.transform.position = checkpoint; 
} 
+0

爲了能夠做到這一點,你就必須執行某種延時自己。創建類似於'Dictionary >'的東西,它將支持像'PositionChangeAction:ObjectAction {ActionType actionType = ActionType.PositionY; float fromValue = 3.3f,toValue = 3.45f;對象目標; }'然後每次更新後,只需將這些操作添加到該timelapse('Dictionary')。 –

+0

我用適合您的問題的方法更新了我的答案。檢查它,讓我知道,如果這是你在找什麼 –

回答

1

我爲那個對撞機創建了一個子對象。當我碰撞對撞機時,我把孩子移到了我想讓玩家生活的地方。

Void OnCollisionEnter2D(Collision2D col) 
    { 
     if(col.gameobject.tag=="die") 
      { 
       checkpoint = col.transform.GetChil(0).position; 
      } 
    } 

void Reset(){ 
      Player.transform.position = checkpoint; 
} 
+0

無效OnCollisionEnter2D(Collision2D COL) \t { \t \t如果(col.gameObject.tag == 「撞機」) \t \t { \t \t \t Vector2檢查站= Vector2(transform.position.x,transform.position.y +5); \t \t \t \t \t } \t \t } \t空隙復位(){ \t \t this.transform.position =檢查點; \t}我已經這樣做了,但現在我得到一個錯誤:表達式表示一個'類型',其中'變量','值'或'方法組'' – Comp

+0

@Ignacio Alorre是對的。 'Vector2檢查點=新Vector2(transform.position.x,transform.position.y 5);' 不 'Vector2檢查點= Vector2(transform.position.x,transform.position.y 5) ;' –

+0

謝謝@Hieu,是的,「新」解決了他所面臨的問題,但他沒有贊成或接受,而是編輯了沒有錯誤的問題。我認爲你的答案也會爲你+1。但是他想要回溯的解決方案在Unity中並不存在。我現在更新了我的答案,並解決了他仍然面臨的問題,但是肯定他不會在引擎中找到任何內容來保存玩家的狀態。 –

0

沒有內置的函數來統一時間,這需要統一記錄所有事件直到那個點。

但是考慮到你的例子,你可以做的是創建一個'檢查點',其中場景以特定方式設置,對象位於特定位置。就像你在馬里奧跌倒時一樣,它會播放一些音樂來表明你失敗了,然後馬里奧回到某個位置。只需要一個將玩家位置改變爲檢查點位置的功能。這同樣適用於需要重置的任何其他遊戲對象。

public void Reset() 
{ 
    player.position = checkpoint.position; 
} 
1

你的錯誤是因爲你缺少關鍵字Vector2

When using C# you need to use the new keyword in front of all constructors. Constructors are like functions that are used to create new objects (or scructs). They always have the same name as the type of object you are creating.

所以,如果你應該寫

Vector2 checkpoint = new Vector2(transform.position.x, transform.position.y +5) 

代替:

Vector2 checkpoint = Vector2(transform.position.x, transform.position.y +5) 

編輯:現在你編輯了你的問題沒有錯誤,並且由於你仍然在試圖找到一種能夠及時回溯Unity中發生的事情的方法,我可以告訴你這個事情不存在。但是你可以自己實現它。我建議你這樣的事情:

  • 如果它是一個平臺的2D遊戲,像馬里奧兄弟的風格,你可以在 場景,當玩家 通過他們去被激活觸發器的順序放置。

  • 然後就可以有一個長度n等於 多個觸發器,然後一個矩陣NX2(觸發器X 座標每個觸發的[X,Y]的數)boolean array

  • 最初,所有的數組中的元素具有false值,和每 觸發被激活correcponding元件在 陣列變爲真實時間。

  • 當玩家死亡時,它會檢查數組中的所有元素,直到其 到達最後一個真實元素(這將是最後觸發的 激活)。

  • 使用上一步的索引形式訪問觸發器的矩陣,並提取兩個元素(x和y座標)。然後你 使用該值:

使用腳本:

Vector2 checkpoint = new Vector2(xCoordinate, yCoordinate);