Tranform.Find 没有获得正确的游戏对象
Tranform.Find Isn't Getting the Correct GameObject
我觉得这个问题不好问,但我无法弄清楚问题出在哪里。
我正在制作一个 ScoreController,我想制作一个硬币对象,当它被击中时,得分 GUI 会增加 100。所有的硬币里面都有这个脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CoinScoreController : MonoBehaviour
{
public void OnTriggerEnter2D(Collider2D collider)
{
transform.parent.parent.parent.Find("Canvas/ScoreUIController").CollectCoin();
}
}
我知道这是一种非常糟糕的获取对象的方法,但我不知道问题出在哪里。这是我试图引用的脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ScoreController : MonoBehaviour
{
public static int score = 0; //Number of coins
public static GameObject scoreUI; //A gameObject for the CoinUI
// Update is called once per frame
void Start()
{
scoreUI = GameObject.Find("ScoreUI"); //Automatically sets all coins to have their coinUI GameObject equal the CoinUI UI.
}
public void CollectCoin() //Runs when a coin is collected. Makes it disapear and adds one to the counter.
{
gameObject.SetActive(false);
score += 100;
scoreUI.GetComponent<Text>().text = "Score: " + score.ToString();
}
public void KilledMonster()
{
score += 1000;
}
}
ScoreControllerUI 在 Canvas 里面,所以我认为我的路径没有错误。你能不transform.Find()从现场吗?这是我的场景:
我相信你会说,我是这个网站和 Unity 的新手,所以对于我提出这个问题的方式中的任何错误,我深表歉意。也请随时给我建设性的批评。我正在使用统一版本 2020.3.24f1 并使用 C# 进行编码。我不知道这是否相关,但我正在使用 visual studio.
进行编码
再次为我犯下的愚蠢错误道歉。
而不是使用
transform.parent.parent.parent.Find("Canvas/ScoreUIController").CollectCoin();
使用
GameObject.Find("Canvas/ScoreUIController").GetComponent<ScoreController>().CollectCoin();
建议:在您的 CoinScoreController
中定义一个 public ScoreController ScoreUIController
(我假设您的硬币是预制件)然后将 ScoreUIController
拖放到其中以将您的脚本分配给我们定义的变量。
现在,您可以调用
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CoinScoreController : MonoBehaviour
{
public ScoreController ScoreUIController;
public void OnTriggerEnter2D(Collider2D collider)
{
ScoreUIController.CollectCoin();
}
}
P.S。 : 请先按照教程阅读文档,因为我看到你的代码非常繁重。
我觉得这个问题不好问,但我无法弄清楚问题出在哪里。
我正在制作一个 ScoreController,我想制作一个硬币对象,当它被击中时,得分 GUI 会增加 100。所有的硬币里面都有这个脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CoinScoreController : MonoBehaviour
{
public void OnTriggerEnter2D(Collider2D collider)
{
transform.parent.parent.parent.Find("Canvas/ScoreUIController").CollectCoin();
}
}
我知道这是一种非常糟糕的获取对象的方法,但我不知道问题出在哪里。这是我试图引用的脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ScoreController : MonoBehaviour
{
public static int score = 0; //Number of coins
public static GameObject scoreUI; //A gameObject for the CoinUI
// Update is called once per frame
void Start()
{
scoreUI = GameObject.Find("ScoreUI"); //Automatically sets all coins to have their coinUI GameObject equal the CoinUI UI.
}
public void CollectCoin() //Runs when a coin is collected. Makes it disapear and adds one to the counter.
{
gameObject.SetActive(false);
score += 100;
scoreUI.GetComponent<Text>().text = "Score: " + score.ToString();
}
public void KilledMonster()
{
score += 1000;
}
}
ScoreControllerUI 在 Canvas 里面,所以我认为我的路径没有错误。你能不transform.Find()从现场吗?这是我的场景:
我相信你会说,我是这个网站和 Unity 的新手,所以对于我提出这个问题的方式中的任何错误,我深表歉意。也请随时给我建设性的批评。我正在使用统一版本 2020.3.24f1 并使用 C# 进行编码。我不知道这是否相关,但我正在使用 visual studio.
进行编码再次为我犯下的愚蠢错误道歉。
而不是使用
transform.parent.parent.parent.Find("Canvas/ScoreUIController").CollectCoin();
使用
GameObject.Find("Canvas/ScoreUIController").GetComponent<ScoreController>().CollectCoin();
建议:在您的 CoinScoreController
中定义一个 public ScoreController ScoreUIController
(我假设您的硬币是预制件)然后将 ScoreUIController
拖放到其中以将您的脚本分配给我们定义的变量。
现在,您可以调用
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CoinScoreController : MonoBehaviour
{
public ScoreController ScoreUIController;
public void OnTriggerEnter2D(Collider2D collider)
{
ScoreUIController.CollectCoin();
}
}
P.S。 : 请先按照教程阅读文档,因为我看到你的代码非常繁重。