C# 如何在Unity游戏中再尝试一次函数
我不知道该怎么做。如果游戏对象掉落并与碰撞器碰撞,您将输掉一场游戏。我想添加一个功能,询问玩家是否需要再次尝试,如果是,它将在一段时间内反转,这样掉落的游戏对象将重新出现在屏幕上,用户可以再次玩。是否有某种时间函数/方法可以做到这一点? 希望你能理解C# 如何在Unity游戏中再尝试一次函数,c#,unity3d,unity2d,C#,Unity3d,Unity2d,我不知道该怎么做。如果游戏对象掉落并与碰撞器碰撞,您将输掉一场游戏。我想添加一个功能,询问玩家是否需要再次尝试,如果是,它将在一段时间内反转,这样掉落的游戏对象将重新出现在屏幕上,用户可以再次玩。是否有某种时间函数/方法可以做到这一点? 希望你能理解 void OnCollisionEnter2D(Collision2D col) { if(col.gameObject.tag=="Collider") { Vector2 checkpoint = new Vect
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;
}
在unity中没有反转时间的内置功能,这将需要unity记录到该点之前的所有事件 但根据您的示例,您可以创建一个“检查点”,其中场景以特定方式设置,对象位于特定位置。就像在《马里奥》中,你摔倒了,它播放一些音乐来表示你失败了,然后它把马里奥放回某个位置。只是有一个功能,改变球员的位置到检查点的位置。这同样适用于任何其他需要重置的游戏对象
public void Reset()
{
player.position = checkpoint.position;
}
在unity中没有反转时间的内置功能,这将需要unity记录到该点之前的所有事件 但根据您的示例,您可以创建一个“检查点”,其中场景以特定方式设置,对象位于特定位置。就像在《马里奥》中,你摔倒了,它播放一些音乐来表示你失败了,然后它把马里奥放回某个位置。只是有一个功能,改变球员的位置到检查点的位置。这同样适用于任何其他需要重置的游戏对象
public void Reset()
{
player.position = checkpoint.position;
}
我为碰撞器创建了一个子对象。当我与对撞机相撞时,我把孩子移到了我想要玩家居住的地方
Void OnCollisionEnter2D(Collision2D col)
{
if(col.gameobject.tag=="die")
{
checkpoint = col.transform.GetChil(0).position;
}
}
void Reset(){
Player.transform.position = checkpoint;
}
我为碰撞器创建了一个子对象。当我与对撞机相撞时,我把孩子移到了我想要玩家居住的地方
Void OnCollisionEnter2D(Collision2D col)
{
if(col.gameobject.tag=="die")
{
checkpoint = col.transform.GetChil(0).position;
}
}
void Reset(){
Player.transform.position = checkpoint;
}
您的错误是因为在Vector2之前缺少new关键字 使用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游戏,像马里奥兄弟的风格,你可以放置在 您的场景包含一系列触发器,当玩家 检查一下
- 然后,您可以使用长度
等于 触发器数量,然后是矩阵nx2(触发器数量x 每个触发器的坐标[x,y])n
- 最初,数组中的所有元素都有一个
值,并且 每次激活触发器时,系统中的相应元素 数组更改为truefalse
- 当玩家死亡时,它会检查数组中的所有元素,直到 到达最后一个true元素(这将是最后一次触发 激活)
- 使用上一步的索引表单,您可以访问 触发并提取两个元素(x和y坐标)。那你呢 将该值用于:
Vector2 checkpoint = new Vector2(xCoordinate, yCoordinate);
您的错误是因为在Vector2之前缺少new关键字 使用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游戏,像马里奥兄弟的风格,你可以放置在 您的场景包含一系列触发器,当玩家 检查一下
- 然后,您可以使用长度
等于 触发器数量,然后是矩阵nx2(触发器数量x 每个触发器的坐标[x,y])n
- 最初,数组中的所有元素都有一个
值,并且 每次激活触发器时,系统中的相应元素 数组更改为truefalse
- 当玩家死亡时,它会检查数组中的所有元素,直到 到达最后一个true元素(这将是最后一次触发 激活)
- 使用上一步的索引表单,您可以访问 触发并提取两个元素(x和y坐标)。那你呢 将该值用于:
Vector2 checkpoint = new Vector2(xCoordinate, yCoordinate);
要做到这一点,您必须自己实现某种时间点。创建一个类似于
字典的东西
,它将支持像位置更改操作:ObjectAction{ActionType ActionType=ActionType.PositionY;float fromValue=3.3f,toValue=3.45f;Object target;}
这样的操作,然后在每次更新之后只需将这些操作添加到该时间点(字典
).我更新了我的答案,采用了一种可能解决您问题的方法。检查它,让我知道,如果这是你正在寻找能够做到这一点,你将不得不实施某种形式的timelapse自己。创建一个类似于字典的东西
,它将支持像位置更改操作:ObjectAction{ActionType ActionType=ActionType.PositionY;float fromValue=3.3f,toValue=3.45f;Object target;}
这样的操作,然后在每次更新之后只需将这些操作添加到该时间点(字典
).我更新了我的答案