2017-08-25 73 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);