C# 如何在unity中引用不同脚本中的函数和变量?

C# 如何在unity中引用不同脚本中的函数和变量?,c#,function,unity3d,C#,Function,Unity3d,我在Unity中制作一个游戏,你是一支白色的箭,随时指向鼠标,你可以射向寻路的敌人,摧毁他们。如果5个寻路敌人击中你,游戏将重新启动。但是有一个漏洞-分数每秒上升1倍,每15发子弹就会产生敌人,所以我决定每次你用子弹击中敌人时,分数上升1倍。为此,我创建了一个score脚本: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public cl

我在Unity中制作一个游戏,你是一支白色的箭,随时指向鼠标,你可以射向寻路的敌人,摧毁他们。如果5个寻路敌人击中你,游戏将重新启动。但是有一个漏洞-分数每秒上升1倍,每15发子弹就会产生敌人,所以我决定每次你用子弹击中敌人时,分数上升1倍。为此,我创建了一个
score
脚本:

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

public class score : MonoBehaviour
{
    public float scoreCount = 0f;
    public Text scoreText;
    private bool b = true;

    public void AddToScore()
    {
        scoreCount += 1f;
        Debug.Log("Added 1 to score");
    }

    void Update()
    {
        scoreText.text = scoreCount.ToString("0");
    }
敌人
脚本中,我告诉它在被击中后摧毁自己之前,在分数上加1:

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

public class enemy : MonoBehaviour
{
    public float counter = 0f;
    public float spawnRadius = 10f;
    public GameObject enemyGO;
    public float scoreCounter = 0f;


    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "bullet")
        {
            counter += 1f;
            if (counter % 15 == 0)
            {
                Vector2 spawnPos = GameObject.Find("Player").transform.position;
                spawnPos += Random.insideUnitCircle.normalized * spawnRadius;
                enemyGO = Instantiate(gameObject, spawnPos, Quaternion.identity);
                enemyGO.GetComponent<Pathfinding.AIDestinationSetter>().target = GameObject.Find("Player").transform;

                GameObject.Find("Player").GetComponent<score>().AddToScore(); // HERE'S THE SCORE ADDING BIT

                
            }
            Destroy(gameObject, 0.1f);


            // GameObject player = GameObject.Find("Player");
            // scoreCounter = scoreCounter + 1f;
            // player.GetComponent<score>().scoreCount = scoreCounter;

        }
        if (collision.gameObject.tag == "player")
        {
            Destroy(gameObject, 0.1f);
        }
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
公共阶级敌人:单一行为
{
公共浮动计数器=0f;
公共浮动半径=10f;
公共游戏对象enemyGO;
公共浮点数计数器=0f;
私有无效OnTiggerEnter2D(已碰撞R2D碰撞)
{
如果(collision.gameObject.tag==“bullet”)
{
计数器+=1f;
如果(计数器%15==0)
{
Vector2 spawnPos=GameObject.Find(“Player”).transform.position;
spawnPos+=Random.insideUnitCircle.normalized*繁殖半径;
enemyGO=实例化(gameObject、spawnPos、Quaternion.identity);
enemyGO.GetComponent().target=GameObject.Find(“Player”).transform;
GameObject.Find(“Player”).GetComponent().AddToScore();//这是分数添加位
}
摧毁(游戏对象,0.1f);
//GameObject player=GameObject.Find(“player”);
//记分器=记分器+1f;
//player.GetComponent().scoreCount=scoreCounter;
}
如果(collision.gameObject.tag==“player”)
{
摧毁(游戏对象,0.1f);
}
}
}
但是当我运行游戏时,没有错误,但是分数没有上升。我玩了一会儿,发现
score
脚本没有收到增加分数的命令。请帮忙


谢谢

您确定您的脚本处于“如果(计数器%15==0)”状态吗?确保在这些情况下放置一些“Debug.Logs()”,以了解代码中发生了什么。在您当前的代码中,我可以告诉您,只有当计数器变为15时,您的分数才会增加,而不会变为15,因为您总是用“如果”(计数器%15==0)中的1次命中来摧毁您的敌人条件。

为什么要使用浮子来counter@Ruzihm当我第一次开始制作游戏时,我将计数器用于其他用途,并且从那以后就没有改变过它——但它不会影响游戏,所以它很好,正如@ğağatay IŞIK在下面指出的那样,你在你的计数器增加到15之前摧毁敌人。尝试将你的计数器移动到玩家身上,而不是将其作为一个实例字段enemy@Ruzihm非常感谢-我现在要去换了!!非常感谢!我现在就去。