вызов массива игровых объектов с именем «яблоко» из скрипта с именем «деньги» - PullRequest
1 голос
/ 19 июня 2020

(в Unity 2D) Итак, у меня есть сценарий для суммы денег и яблок, которые есть в моей игре, и я хочу, чтобы более 1 игрового объекта имели сценарий количества яблок. кстати, есть недействительный TransferMoney и IS publi c. Я делаю это, и мне нужно передать имеющуюся у меня сумму денег в сценарий apple, но поскольку это массив, он выдает следующую ошибку: (55,16): error CS1061: 'apple []' не содержит определения для 'TransferMoney' и не может быть найден доступный метод расширения 'TransferMoney', принимающий первый аргумент типа 'apple []' (вы пропустили директиву using или ссылку на сборку?) Вот сценарий денег:


public class numberofmoney : MonoBehaviour //script in the Text UI "amount of money" {

 static public int scenemoney;
 public string house;
 public string shopString;

 public TMP_Text moneyText;
 public cookie1 Cookie;
 public apple[] apples;
 public void BoughtApple(int currentAOM)//aom stands for 'amount of money'
 {
     scenemoney = currentAOM;
 }
 void Awake()
 {
     apples = GameObject.FindObjectsOfType<apple>();  //finds apple
 }
 void Start()
 {
     Scene cookie = SceneManager.GetActiveScene();
     house = cookie.name;    //checks scene and does part of converting to string
     Scene shop = SceneManager.GetActiveScene();
     shopString = shop.name; //checks scene and does part of converting to string

 }
 public void forCookie(int money)
 {
     scenemoney = money;
 }
 void Update()
 {
     string scenemoneystring = scenemoney.ToString();
     moneyText.SetText(scenemoneystring); //Converts money and sets text
     if (house == "House") {     //transfers money between scripts #1
     Cookie.transferMoney(scenemoney);
     }
     if (shopString == "store") { //transfers money between scripts #2
     apples.TransferMoney(scenemoney);
     }
 }

} 

и сценарий яблок:

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

public class apple : MonoBehaviour {

 public string appleString;
 public int publicMoney;
 public int Apples;
 public NumberOfApples numberOfApples;
 public TMP_Text tmp;
 public numberofmoney NumberOfMoney;
 void Awake()
 {
     numberOfApples = GameObject.FindObjectOfType<NumberOfApples>();
     NumberOfMoney = GameObject.FindObjectOfType<numberofmoney>();
 }
 public void TransferMoney(int money) 
 {
     publicMoney = money;
 }
 void OnTriggerEnter2D(Collider2D trigger)
 {
     if (publicMoney >= 10){
         Destroy(this.gameObject);
         Apples++;
         publicMoney -= 10;
         appleString = Apples.ToString();
         tmp.SetText(appleString);
         NumberOfMoney.BoughtApple(publicMoney);
     }
     numberOfApples.transferApples(Apples);
 }
} 

1 Ответ

2 голосов
/ 19 июня 2020

Насколько я могу судить, вы делаете:

apples.TransferMoney(scenemoney);

но яблоки - это массив класса apple, вы не можете вызвать метод "transferMoney", вам нужно перебрать каждый объект массива и вызовите метод transferMoney индивидуально.

foreach(apple a  in apples){
    a.TransferMoney(scenemoney);
}

надеюсь, что это поможет!

Отредактировано: ошибка копирования и вставки, вызванная derHu go

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...