【发布时间】:2022-01-12 00:55:51
【问题描述】:
我正在尝试了解 Unity 的工作原理,但现在我遇到了无法从另一个脚本访问脚本的问题。我在 Interner 上搜索了几个小时,我尝试了很多选项,但没有任何帮助。
我有 2 个脚本。
-
CoinSpawn.cs - 附加到播放器(我会将其更改为其他对象,但我还不知道是哪个对象,因为它在后台运行,所以它真的不需要在播放器上)
-
CollectingCoin.cs - 附加到 Coin(Coin 是对象,一开始它不在游戏场景中,它随机生成)
CoinSpawn 是随机生成对象 Coin 的实例化的脚本。我想从 CollectingCoin 更改 CoinSpawn.currentCoinOnScreen 的值。我试过了
CoinSpawn test = GameObject.Find("CoinSpawn").GetComponent<CoinSpawn>();
它不起作用。我的两个脚本也在同一个资产文件夹中。我究竟做错了什么?谢谢
CoinSpawn.cs
public class CoinSpawn : MonoBehaviour
{
public GameObject coin;
public int maximumCoinPerScreen = 10;
public int currentCoinOnScreen = 0;
private int randomNumber;
private Vector2 spawnPosition;
private void Update()
{
randomNumber = Random.Range(1, 1000);
if(randomNumber >= 0 && randomNumber <= 1 && currentCoinOnScreen != maximumCoinPerScreen)
{
currentCoinOnScreen++;
float spawnY = Random.Range
(Camera.main.ScreenToWorldPoint(new Vector2(0, 0)).y, Camera.main.ScreenToWorldPoint(new Vector2(0, Screen.height)).y);
float spawnX = Random.Range
(Camera.main.ScreenToWorldPoint(new Vector2(0, 0)).x, Camera.main.ScreenToWorldPoint(new Vector2(Screen.width, 0)).x);
spawnPosition = new Vector2(spawnX, spawnY);
GameObject coinObject = Instantiate(coin, spawnPosition, Quaternion.identity);
}
}
}
CollectingCoin.cs
public class CollectingCoin : MonoBehaviour
{
UnityEngine.UI.Text Coins;
public static int totalCoins = 0;
private void Start()
{
Coins = GameObject.Find("Score").GetComponent<UnityEngine.UI.Text>();
}
void OnTriggerEnter2D(Collider2D c2d)
{
if (c2d.CompareTag("Player"))
{
totalCoins++;
Destroy(gameObject);
Coins.text = "COINS: " + totalCoins.ToString();
// TESTING
CoinSpawn test = GameObject.Find("CoinSpawn").GetComponent<CoinSpawn>();
CoinSpawn test2 = GetComponent<CoinSpawn>();
}
}
}
【问题讨论】:
-
你的意思是
test.currentCoinOnScreen++? -
请使用正确的标签!请注意,
[unityscript]是或更好地曾经是一种在早期 Unity 版本中使用的自定义 JavaScript 风格的语言,并且现在长期弃用。您的代码显然是c#.. 您更愿意标记的是unity3d,因为这是您要询问的主要 API/框架