如何在Drag.Update()中设置开始位置?

时间:2019-06-17 01:54:34

标签: c# unity3d

我想制作拖放游戏。该游戏可以运行并播放,但是存在一些错误。根据以下2种编码,出现错误:-

完整编码:-

Vector3 startposition;
getTarget.transform.position = Vector3.Lerp(getTarget.transform.position, startposition, 1.0f);
startposition = getTarget.GetComponent<Drag>().originalPosition;

1)第80行出现错误编码

startposition = getTarget.GetComponent<Drag>().originalPosition;

完整编码:-

    if ((dropobject.name == namepartial+"Target") && (getTarget.name == namepartial))
                {
                    startTime = Time.time;
                    journeyLength = Vector3.Distance(getTarget.transform.position, dropobject.transform.position);
                    correct = true;
                    correctdone = false;

                    if (dropobject.name == "ToasterTarget")
                    {
                        infoPanel1.SetActive(true);
                        infoPanel2.SetActive(false);
                        infoPanel3.SetActive(false);
                        infoPanel4.SetActive(false);
                        infoPanel5.SetActive(false);
                        infoPanel6.SetActive(false);
                        infoPanel7.SetActive(false);
                    }
}
    if ((dropobject.name == namepartial+"Target") && (getTarget.name == namepartial))
                {
                    playAudioCorrect();
                    target.GetComponentInChildren<Renderer>().enabled = false;
                    getTarget.tag = "Untagged";

                    int tempscore = int.Parse(scoretext.GetComponent<Text>().text) + 50;
                    scoretext.GetComponent<Text>().text = tempscore.ToString();

                    int tempscore1 = int.Parse(finalScoreText.GetComponent<Text>().text) + 50;
                    finalScoreText.GetComponent<Text>().text = tempscore1.ToString();
                }

2)第150行出现错误编码:-

if ((dropobject.name == namepartial+"Target") && (getTarget.name == namepartial))

控制台第80和105行出现错误:-

  

NullReferenceException:对象引用未设置为对象的实例   Drag.Update()(位于Assets / GameApaNi / Scripts / Drag.cs​​:105)

1 个答案:

答案 0 :(得分:1)

您没有显示您实际遇到的错误,但是鉴于您的代码,我只能假设您遇到了两个错误

  

NullReferenceException

第一个意思是未设置getTargetnull)-不能这样,因为否则您会在-之前的行中得到错误-或getTarget.GetComponent<Drag>()返回null,表示Drag上没有没有组件getTarget

如果未完全附加到getTarget对象,则可以使用GetComponentInParent<Drag>()在层次结构中向上递归搜索,也可以使用GetComponentInChildren<Drag>(true)在层次结构中向下递归搜索


第二个基本相同:dropobjectgetTarget都没有设置,所以null


对于这两者,您都应检查Inspector引用并设置断点,并Debug一行一行地插入代码。


其他一些提示:

通常,您为什么使用完全相同的if条件

if ((dropobject.name == namepartial+"Target") && (getTarget.name == namepartial))

两次通话是分开的吗?您不能将两个块合并为一个吗?

还应尽量避免重复调用GetComponent,因为它们只会存储一次结果并重新使用引用,例如

var scoreText = scoretext.GetComponent<Text>();

int tempscore = int.Parse(scoreText.text) + 50;
scoreText.text = tempscore.ToString();

如果可能的话甚至不要使用它,而只能在Awake中获得相应的组件一次,并在应用程序的整个运行时重复使用相同的引用。

如果您引用了这些内容,例如通过Unity Inspector在类似

的字段中
public GameObject scoretext;

然后将类型更改为

public Text scoretext;

您可以完全摆脱所有GetComponent调用,这将使您的脚本更加高效(快速)。