Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/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# 我的代码有一些问题_C#_User Interface_Variables_Unity3d - Fatal编程技术网

C# 我的代码有一些问题

C# 我的代码有一些问题,c#,user-interface,variables,unity3d,C#,User Interface,Variables,Unity3d,这个代码来自我正在制作的一个游戏。目的是收集火箭零件。当收集零件时,它们将在之后消失,但是当您尝试收集第二个零件时,一旦拾取一个零件,它不会将其添加到parts变量中 using System.Collections; using UnityEngine.UI; using System.Collections.Generic; using UnityEngine; public class Collection : MonoBehaviour { private int Parts; pu

这个代码来自我正在制作的一个游戏。目的是收集火箭零件。当收集零件时,它们将在之后消失,但是当您尝试收集第二个零件时,一旦拾取一个零件,它不会将其添加到parts变量中

using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
using UnityEngine;

public class Collection : MonoBehaviour {

private int Parts;
public Text CountPart;
private string Amount;

void Start ()
{
    Parts = 0;
    SetPartText();
}

// Update is called once per frame
void Update () {
    if (Parts == 10)
    {
        Application.LoadLevel("DONE");
    }
}

void OnMouseDown ()
{
    gameObject.SetActive(false);
    Parts = Parts + 1;
    SetPartText();
}

void SetPartText ()
{
    Amount = Parts.ToString () + "/10";
    CountPart.text = "Rocket Parts Collected: " + Amount;
}
}

首先,你需要考虑一个用例,你想收集火箭零件,然后隐藏/销毁它们,并在游戏对象中添加零件计数

但是您当前的代码有一个问题,您停用了收集零件的当前玩家,因此当您收集第一个零件时,您停用了该玩家,因此您将无法收集其他物品

解决方案是获取收集的部件的引用,然后将其设置为活动(false)


首先,你需要考虑一个用例,你想收集火箭零件,然后隐藏/销毁它们,并在游戏对象中添加零件计数

但是您当前的代码有一个问题,您停用了收集零件的当前玩家,因此当您收集第一个零件时,您停用了该玩家,因此您将无法收集其他物品

解决方案是获取收集的部件的引用,然后将其设置为活动(false)


“它不会将其添加到parts变量”
-这是什么意思?这里真正失败的是什么?一旦玩家收集了10个火箭部件中的第一个,所有这些部件都包含此脚本,它会添加到部件变量中,然后禁用该火箭部件,但当用户继续收集第二个火箭部件时,它会禁用第二个火箭部件,但不会将其添加到部件变量中。确实如此,就在这里:
Parts=Parts+1这听起来是开始使用调试器的好机会。您可以在代码执行时逐行遍历代码,并观察运行时值和行为。当你这样做的时候,观察到的行为与预期的行为有什么不同?具体发生了什么?您期望发生什么?我不知道如何使用调试器,我对编码是新手。当我删除行“gameObject.SetActive(false);”时,程序工作正常,但不会禁用火箭部件gameObject。当我添加相同的代码时,它确实删除了游戏对象,但在删除一个火箭部件后不会在部件变量的部件处执行。然后,这是开始使用调试器的理想时间,哪一个是编程中最有用和最有价值的工具。
“它不会将其添加到parts变量”
-这是什么意思?这里真正失败的是什么?一旦玩家收集了10个火箭部件中的第一个,所有这些部件都包含此脚本,它会添加到部件变量中,然后禁用该火箭部件,但当用户继续收集第二个火箭部件时,它会禁用第二个火箭部件,但不会将其添加到部件变量中。确实如此,就在这里:
Parts=Parts+1这听起来是开始使用调试器的好机会。您可以在代码执行时逐行遍历代码,并观察运行时值和行为。当你这样做的时候,观察到的行为与预期的行为有什么不同?具体发生了什么?您期望发生什么?我不知道如何使用调试器,我对编码是新手。当我删除行“gameObject.SetActive(false);”时,程序工作正常,但不会禁用火箭部件gameObject。当我添加相同的代码时,它确实删除了游戏对象,但在删除一个火箭部件后不会在部件变量的部件处执行。然后,这是开始使用调试器的理想时间,这是迄今为止编程中最有用和最有价值的工具。
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
using UnityEngine;

public class Collection : MonoBehaviour {

private int Parts;
public Text CountPart;
private string Amount;
public GameObject collectedGameObject;
void Start ()
{
    Parts = 0;
    SetPartText();
}

// Update is called once per frame
void Update () {
    if (Parts == 10)
    {
        Application.LoadLevel("DONE");
    }
}

void OnMouseDown ()
{
        //here you need to initialize the collectedGameObject who is collected. you can use Raycasts or Colliders to get the refrences.
    collectedGameObject.SetActive(false);
    Parts = Parts + 1;
    SetPartText();
}

void SetPartText ()
{
    Amount = Parts.ToString () + "/10";
    CountPart.text = "Rocket Parts Collected: " + Amount;

}
}