在脚本之间传递int

时间:2018-10-26 11:46:39

标签: c# unity3d

我必须将一个脚本的int传递给另一个脚本,但不仅仅是一个GameObject中的一个脚本。该脚本位于三个GameObjects(三个武器,并且该脚本带有他的弹药等)上,而拍摄脚本位于相机上(因为我想在屏幕中间进行拍摄)。

相机上的脚本

void Update () 
{
    //Si preta el click izquierdo se ejecuta shoot()
    if(Input.GetButtonDown("Fire1"))
    {
        shoot();
    }
}

//Le vamos a pasar la variable de la municion, para que solo pueda disparar si le queda
public void shoot(int ammoCargador)
{
    RaycastHit hit;

    //Raycast desde la camara, hacia delante, la informacion del raycast y con el rango que le demos
    if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range)) 
    {
        Debug.Log(hit.transform.name);

        //A quien hemos impactado (), y lo llamamos target
        EnemyBase target = hit.transform.GetComponent<EnemyBase>();

        //Comprobamos si lo que hemos impactado es un enemigo
        if(target !=null)
        {
            //Si lo es le mandamos la variable de daño
            target.TakeDamage(damage);
        }
    }

武器脚本

public int ammoCargador= 10, ammoCargadorMax, ammoMochila, ammoMochilaMax;
//Ponemos el GameObject Camara porque es el que lleva el script que nos permite disparar
public GameObject Camara;

private void Start() 
{
    //Le asignamos que camara se llama Main Camera
    Camara = GameObject.Find("Main Camera");
}

void Update () 
{
    WeaponShoot Mandar = Camara.transform.GetComponent<WeaponShoot>();
    Mandar.shoot(ammoCargador);
}

在更新内的shoot();中,我收到了相机脚本的错误

(没有给出与所需形式参数相对应的参数)

1 个答案:

答案 0 :(得分:-1)

public void shoot(int ammoCargadora)意味着您在调用该方法时必须传入int类型的参数,而您在这里不需要这样做:

if(Input.GetButtonDown("Fire1")){
    shoot(); //should be "shoot(123);" or some other number.
}

如果需要,可以通过将该行更改为public void shoot(int ammoCargadora = 123)(其中123是默认值)来使参数可选。