我不知道怎么办。如果游戏对象掉落并与对撞机发生碰撞,则会输掉游戏。我想添加一个功能,询问玩家是否需要另一次尝试,如果是,它将反转一段时间,以便掉落的游戏对象将返回到屏幕上,并允许用户再次玩。有没有某种时间功能/方法来做到这一点? 希望你明白。
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 :(得分:2)
我为该对撞机创建了一个子对象。当我与对撞机相撞时,我将孩子移到了我希望玩家居住的地方。
Void OnCollisionEnter2D(Collision2D col)
{
if(col.gameobject.tag=="die")
{
checkpoint = col.transform.GetChil(0).position;
}
}
void Reset(){
Player.transform.position = checkpoint;
}
答案 1 :(得分:2)
您的错误是因为您在Vector2
之前缺少新关键字使用C#时,您需要在所有人面前使用new关键字 构造函数。构造函数就像用于创建的函数 新对象(或scructs)。它们的名称始终与类型相同 您正在创建的对象。
所以你应该写
Vector2 checkpoint = new Vector2(transform.position.x, transform.position.y +5)
而不是:
Vector2 checkpoint = Vector2(transform.position.x, transform.position.y +5)
编辑:现在您编辑了没有错误的问题,并且由于您仍在尝试找到一种方法可以及时移回Unity中发生的事情,我可以告诉您该问题不存在。但是你可以自己实现它。我建议你这样的事情:
如果它是平台2D游戏,如马里奥兄弟风格,你可以放入 你的场景是一个在玩家激活时触发的序列 通过他们。
然后你可以让boolean array
长度n
等于
触发器数量,然后是矩阵nx2(触发器数量x
每个触发器的坐标[x,y])。
最初,数组中的所有元素都具有false
值,并且
每次触发器被激活时,相应的元素就会被激活
数组更改为true。
当玩家死亡时,它会检查数组中的所有元素,直到它为止 到达最后一个真实元素(这将是最后一次触发 激活)。
使用上一步的索引形式,您可以访问矩阵 触发器并提取两个元素(x和y坐标)。那么你 在以下内容中使用该值:
使用您的脚本:
Vector2 checkpoint = new Vector2(xCoordinate, yCoordinate);
答案 2 :(得分:1)
在内置函数中没有以统一的方式反转时间,这需要统一记录所有事件直到那一点。
但是考虑到你的例子,你可以做的是创建一个'检查点',其中场景以某种方式设置,对象处于特定位置。就像你在马里奥摔倒一样,它播放一些音乐表明你失败了然后它把马里奥带回了某个位置。只需一个功能可以将玩家位置更改为检查点位置。这同样适用于您需要重置的任何其他游戏对象。
public void Reset()
{
player.position = checkpoint.position;
}