Изменение переменной в другом скрипте работает не коректно

Рейтинг: 0Ответов: 0Опубликовано: 10.06.2023

У меня есть два скрипта, один создающий объект в месте мыши и один на объекте. После создания объекта на месте мыши [1] я изменяю его размер на переменную "size" [2] и задаю скрипту объекта его переменную "size" равную переменной "objsize"(size / 10) [3] скрипта создания и, следовательно, размеру объекта. Создание объекта и изменение его размера работает корректно, а изменение переменной "size" нет, в первый раз она почему-то в первый раз равна 50(максимум переменной "size" создателя [4]), а в следующие разы при изменении "size" создателя, "size" объекта как бы "запаздывает" на 1 раз после чего вроде становится правильным, пока я снова не изменю "size".

Скрипт создания объекта:

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

public class elementsspawn : MonoBehaviour
{
    public GameObject hydrogen;
    [SerializeField] 
    private ironreact ironreact;    
    public GameObject iron;
    public GameObject H2O;
    public int choose;
    public int startchoose;
    private GameObject spawnObject;
    public Camera camera;
    public float size;
    private float objsize;
    private float sizemax;
    public Image sizebar;
    public float spawntype;

    // Start is called before the first frame update
    void Start()
    {
        choose = startchoose;
        sizemax = 50;
    }

    // Update is called once per frame
    void Update()
    {
        if(choose <= 1) {
            spawntype = 1;
        }
        else if(choose <= 2) {
            spawntype = 2;
        }
        else if(choose <= 3) {
            spawntype = 3;
        }
        if(choose == 1) {
            spawnObject = hydrogen;
        }
        else if(choose == 2) {
            spawnObject = iron;
        }
        else if(choose == 3) {
            spawnObject = H2O;
        }
        size += (Input.GetAxis("Mouse ScrollWheel") * 10);
        /*----------------[4]-----------------*/
        if(size >= sizemax) {
            size = sizemax;
        }
        if(size <= 1) {
            size = 1;
        }
        if(Input.GetMouseButtonDown(0)) {
            if(spawntype == 1) {
                for (int i = 1; i < size * 5 + 1; i++) {
                    GameObject newObject = Instantiate(spawnObject, GetComponent<Camera>().ScreenToWorldPoint(Input .mousePosition) + Vector3.forward, Quaternion.identity) as GameObject; 
                }
            }
            else if(spawntype == 2) {
                objsize = size / 10;
                /*----------------[1]-----------------*/
                GameObject newObject = Instantiate(spawnObject, GetComponent<Camera>().ScreenToWorldPoint(Input .mousePosition) + Vector3.forward, Quaternion.identity) as GameObject;
                /*----------------[2]-----------------*/
                newObject.transform.localScale = new Vector3(objsize, objsize, objsize);
                /*----------------[3]-----------------*/
                float newsize = size;
                ironreact.SetSize(newsize); 
            }
            else if(spawntype == 3) {
                for (int i = 1; i < size * 2 + 1; i++) {
                    objsize = Random.Range(0.5f, 1.5f);
                    GameObject newObject = Instantiate(spawnObject, GetComponent<Camera>().ScreenToWorldPoint(Input .mousePosition) + Vector3.forward, Quaternion.identity) as GameObject;
                    newObject.transform.localScale = new Vector3(objsize, objsize, objsize);
                }
            }
        }
        sizebar.fillAmount = size / sizemax;
    }
    public void Reset() {
        GameObject[] list = GameObject.FindGameObjectsWithTag("water");
        int i = list.Length;
        while (--i >= 0) {
            GameObject obji = list[i];
            Destroy(obji); 
        }
      // удалить obj    
    }
    public void Hidrargiumchoose() {
        choose = 1;
    }
    public void Ferumchoose() {
        choose = 2;
    }
        public void Waterchoose() {
        choose = 3;
    }
}

Скрипт объекта:

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

public class ironreact : MonoBehaviour
{
    public float colisiontimes;
    public GameObject hidrograg;
    public GameObject rjav;
    public GameObject thisGameObject;
    public float size;
    // Start is called before the first frame update
    /*----------------[3]-----------------*/
    public void SetSize(float newsize) {
        size = newsize;
    }
    private void OnCollisionEnter2D(Collision collision) {
        if (collision.gameObject.CompareTag("water")) {
            colisiontimes = colisiontimes + 1;
            GameObject[] list = GameObject.FindGameObjectsWithTag("water");
            int i = list.Length;
            GameObject obji = list[i];
            if(colisiontimes >= size) {
                while (--i >= 0) {
                    Destroy(obji);
                }
            }
        }
    }
    private void OnCollisionEnter(Collision collision) 
    {
        if(gameObject.tag == "water") {
            colisiontimes = colisiontimes - 1;
        }
    }
    // Update is called once per frame

}

Также проблему решит задав переменной "size" объекта значение напрямую через размер объекта. Надеюсь, указал всё что нужно.

Ответы

Ответов пока нет.