Изменение переменной в другом скрипте работает не коректно
У меня есть два скрипта, один создающий объект в месте мыши и один на объекте. После создания объекта на месте мыши [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" объекта значение напрямую через размер объекта. Надеюсь, указал всё что нужно.