어떤 GameObject에서 다른 GameObject의 변수를 읽으려고 반하면...

4443 단어 Unity

개시하다


제목처럼 반했어.
눈치채면 그렇다고 생각하겠지...ω・`)

홀린 곳


객체(OBJ A)와 객체(OBJ B).OBJA와 OBJ.B는 모두 prefab화된 것이다.(편의를 위해 OBJ A의 prefab을 OBJ A[pre]로 표현한다.)
OBJ_A와 OBJ.B에는 각각의 스크립트(A.cs, B.cs)가 포함되어 있습니다.
A.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class A : MonoBehaviour {

    public GameObject bObj;
    private B b;

    // Use this for initialization
    void Start () {
        b = bObj.GetComponent<B> ();
    }

    // Update is called once per frame
    void Update () {
        Debug.Log ("A:" + b.num);
    }
}

B.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class B : MonoBehaviour {

    public int num = 0;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        num++;
        Debug.Log ("B:" + num);
    }
}

B 스크립트의num을 추가할 때마다 증가하고num의 값은 A와 B 스크립트에서 컨트롤러로 출력됩니다.
bObj에서B, OBJ를 넣기 위해서.Inspector에 A를 표시하면 다음과 같습니다.

지금부터 여기 있어요.B 가입했지만 (평소처럼) OBJ는 생각 안 했어요B[pre]가 추가되어 출력은 다음과 같습니다.

그리고 이 출력을 봤어요. "!?"이렇게 됐어.

까닭


OBJ_B[pre]를 넣었기 때문입니다.
OBJ_B[pre] 내부를 보더라도 업데이트 함수가 점증하는num은 거기에 없습니다.num = 0기다리고 있을 뿐이다.Update 함수는 게임에서 유효한 대상이 되어야 하기 때문이다.

해결책


제 생각엔 이미 알 것 같은데, Hierrarchy에 있는 OBJB 넣어야 될 것 같은데.
다음은 당시의 출력 결과다.

끝맺다


무슨 소리야? 당연하지.이렇게 말한 내용이지만 그때 푹 빠진 이유는 불분명하다이런 느낌이야.Instantiate에서 사용할 대상을 고려하지 않고 프리패브의 계산서를 설정해 두세요(´/ω・`)
설명과 문장의 사용에 잘못된 점이 있으면 지적해 주십시오.

좋은 웹페이지 즐겨찾기