@kontay

Доступ к значению переменной int из другого скрипта?

хотел я сделать стрельбу для персонажа, и добавить такой хот бар в котором хранится и отображается значение "int value", и надо чтоб при выстреле (функция которого в скрипте "Gun" ) в другом скрипте ("ProgressBarComponent") убавлялась эта самая value. Прошу помогите!(в скрипте есть мои попытки сделать это)

скрипт ProgressBarComponent :
using UnityEngine;
using UnityEngine.UI;
using System.Collections;

    public class ProgressBarComponent : MonoBehaviour
    {
        [Header("UI Elements")] 
        [SerializeField] private Image image;

        [Header("Properties")] 
        public int value = 0;
        private int maxValue = 50;
        private bool isCorrectlyConfigured = false;

        public Transform shotpos;
        public GameObject Bullet;

        private void Start()
        {
            StartCoroutine(addScore());
        }

        private void Awake()
        {
            if (image.type == Image.Type.Filled & image.fillMethod == Image.FillMethod.Horizontal)
            {
                isCorrectlyConfigured = true;
            }
            else
            {
                Debug.Log("{GameLog} => [ProgressBarController] - (<color=red>Error</color>) -> Components Parameters Are Incorrectly Configured! \n" +
                          "Required Type: Filled \n" +
                          "Required FillMethod: Horizontal");
            }
        }

        private void LateUpdate()
        {
            if (!isCorrectlyConfigured) return;
            image.fillAmount = (float) value / maxValue;
        }




        public void SetValue(int value) => this.value = value;
        public void SetMaxValue(int maxValue) => this.maxValue = maxValue;

        private IEnumerator addScore()
        {
            while (true)
            {
                yield return new WaitForSeconds(1);
                if (value < 50) 
                {
                    value++;
                }

            }
        }


скрипт Gun:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Gun : MonoBehaviour
{
    public float offset;
    public Transform shotpos;
    public GameObject Bullet;

    void Update()
    {
        Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
        float rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
        transform.rotation = Quaternion.Euler(0f, 0f, rotZ + offset);
    }

    public void Fire(int value)
    {
        if (Input.GetMouseButton(0) && value > 4)
        {
            Instantiate(Bullet, shotpos.position, transform.rotation);
            value -= 5;
        }
    }
        
}


дискорд для связи: kontay#7833
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 2
freeExec
@freeExec
Участник OpenStreetMap
Добавь ссылку на прогресбар в пушку и будет тебе доступ.
кошелёк для платежа: 792753214756
Ответ написан
hekkaaa
@hekkaaa
C#/.NET Developer
Привет!
Тут 3 варианта как я вижу и freeExec тебе верно подсказал - нужна ссылка на поле value (его можно сделать и свойством даже).
1. Можно вызывать метод стрельбы и в его аргументы закидывать аргумент value с параметром ref.
Пример: public void Shot(ref value)
Тем самым внутри метода делать value-- или value++.

2. Можно сделать value static и закидывать так же как в вариант 1, только без ref

3. Прокидывать ВЕСЬ объект ProgressBarComponent и обращаться к его публичным свойствам или полям меняя их внутри метода выстрела. (Ну так себе способ на мой взгляд). Можно сделать это через DI например, если он применяется в геймдеве конечно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы