어떤 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.csusing 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.csusing 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에서 사용할 대상을 고려하지 않고 프리패브의 계산서를 설정해 두세요(´/ω・`)
설명과 문장의 사용에 잘못된 점이 있으면 지적해 주십시오.
Reference
이 문제에 관하여(어떤 GameObject에서 다른 GameObject의 변수를 읽으려고 반하면...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pafu/items/5d25f5470ecc464a730e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
객체(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.csusing 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에서 사용할 대상을 고려하지 않고 프리패브의 계산서를 설정해 두세요(´/ω・`)
설명과 문장의 사용에 잘못된 점이 있으면 지적해 주십시오.
Reference
이 문제에 관하여(어떤 GameObject에서 다른 GameObject의 변수를 읽으려고 반하면...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pafu/items/5d25f5470ecc464a730e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
제 생각엔 이미 알 것 같은데, Hierrarchy에 있는 OBJB 넣어야 될 것 같은데.
다음은 당시의 출력 결과다.
끝맺다
무슨 소리야? 당연하지.이렇게 말한 내용이지만 그때 푹 빠진 이유는 불분명하다이런 느낌이야.Instantiate에서 사용할 대상을 고려하지 않고 프리패브의 계산서를 설정해 두세요(´/ω・`)
설명과 문장의 사용에 잘못된 점이 있으면 지적해 주십시오.
Reference
이 문제에 관하여(어떤 GameObject에서 다른 GameObject의 변수를 읽으려고 반하면...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/pafu/items/5d25f5470ecc464a730e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(어떤 GameObject에서 다른 GameObject의 변수를 읽으려고 반하면...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/pafu/items/5d25f5470ecc464a730e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)