Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Unity游戏中再尝试一次函数_C#_Unity3d_Unity2d - Fatal编程技术网

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游戏,像马里奥兄弟的风格,你可以放置在 您的场景包含一系列触发器,当玩家 检查一下

  • 然后,您可以使用长度
    n
    等于 触发器数量,然后是矩阵nx2(触发器数量x 每个触发器的坐标[x,y])

  • 最初,数组中的所有元素都有一个
    false
    值,并且 每次激活触发器时,系统中的相应元素 数组更改为true

  • 当玩家死亡时,它会检查数组中的所有元素,直到 到达最后一个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游戏,像马里奥兄弟的风格,你可以放置在 您的场景包含一系列触发器,当玩家 检查一下

  • 然后,您可以使用长度
    n
    等于 触发器数量,然后是矩阵nx2(触发器数量x 每个触发器的坐标[x,y])

  • 最初,数组中的所有元素都有一个
    false
    值,并且 每次激活触发器时,系统中的相应元素 数组更改为true

  • 当玩家死亡时,它会检查数组中的所有元素,直到 到达最后一个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;}
这样的操作,然后在每次更新之后只需将这些操作添加到该时间点(
字典
).我更新了我的答案