Bool ссылается на скрипт не обновляется? - PullRequest
0 голосов
/ 15 января 2020

У меня в скрипте есть что-то вроде isDead, которое я могу изменить в инспекторе. Я использую Get Component для ссылки на bool в другом скрипте с именем main, в котором я называю его isD, и использую Debug.Log, чтобы увидеть его в консоли. Когда я запускаю scrpit, консоль показывает правильное состояние bool, но когда я изменяю его значение в инспекторе, значение в консоли остается прежним.

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

public class Main : MonoBehaviour
{
    bool isD;
    public GameObject Side;
    void Start()
    {
        isD = Something.GetComponent<Something>().isDead;
        Debug.Log(isD);
    }

    // Update is called once per frame
    void Update()
    {
       Debug.Log(isD);
    }
} 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Something : MonoBehaviour
{
    public bool isDead;
    void Start()
    {
        isDead = false;
    }

    // Update is called once per frame
    void Update()
    {

    }
}

Ответы [ 2 ]

1 голос
/ 15 января 2020

bool является типом значения, поэтому при его назначении вы копируете значение, а не ссылку. Вместо этого вы можете просто сохранить ссылку на объект и получить из него значение isDead по мере необходимости.

Обратите внимание, что по умолчанию нет гарантии порядка вызовов Start, поэтому вам следует рассмотреть возможность помещения кода который должен запускаться первым в Awake.

Кроме того, пустые маги c методы тратят время обработки. Избавьтесь от любых определений Обновления, а не оставляйте их пустыми.

Переименование вашего Something класса в Side (несомненно, это была опечатка какого-то рода), это может выглядеть так:

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

public class Main : MonoBehaviour
{
    Side sideOfSomething;
    public GameObject Something;
    void Start()
    {
        sideOfSomething = Something.GetComponent<Side>();
        Debug.Log(sideOfSomething.isDead);
    }

    // Update is called once per frame
    void Update()
    {
       Debug.Log(sideOfSomething.isDead);
    }
} 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Side : MonoBehaviour
{
    public bool isDead;
    void Awake() // called prior to any Start
    {
        isDead = false;
    }

    // Empty magic methods waste cycles
}
0 голосов
/ 15 января 2020

вы должны изменить bool при обновлении, а не при запуске, тогда вы можете увидеть измененное значение isD

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

public class Main : MonoBehaviour
{
    bool isD;
    public Something something;
    void Start()
    {

     something = GetComponent<Something>();
    }

    // Update is called once per frame
    void Update()
    {
       isD = something.isdead;
       Debug.Log(isD);
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...