While문 안에서 Instantiate(프리펩 A, Vector3.zero, rotation); 를 통해 B라는 게임 오브젝트를 생성했습니다.
B,name 으로 이름을 설정하고
B.transform.localScale 로 게임 오브젝트의 크기를 정해줍니다.
B 오브젝트는 float타입의 C변수를 가지고 있는데
반복문이 돌아갈 때마다, 생성된 B 오브젝트들 (B1, B2, B3, ...) 각각의 C변수 값의 합을 구하고 싶습니다.
while 문이 다 돌아간 이후에는 GameObject[] obj = GameObject.FindGameObjectsWithTag("Num");
이걸 통해서 생성된 모든 B 오브젝트를 찾고, foreach 문을 통해 C변수의 총합 D와, D를 연산한 E를 구할 수 있었습니다.
foreach (GameObject DC in obj)
{
D+= DC.GetComponent<클래스명>().C;
E = (D / 100)
}
// D, E는 float 타입 전역 변수
문제는 while문이 돌아갈 때마다 D를 구하지 못한단 것입니다.
0값만 계속 출력하더라고요...
C변수 값의 합(D)이 특정 숫자를 넘어가면 while문을 끝내고 싶은데, 어렵습니다...
이런 경우에는 무엇이 문제일까요? 궁금하여 질문글 올려봅니다.
https://chat.openai.com/share/2cad00ec-cdef-4f19-837d-7055a30a77b1
원하는게 맞는지는 모르겠지만 GPT하고 질답 주고받는게 빠를거같다
해결은 안되었지만(여전히 반복되는 회수만큼 0이 나오네요.) 댓글 감사합니다.
1. D 초기화 확인 2. C 변수 0인지 확인
D 전역변수더라도 while문 전에서 초기화 한번 해보시고 프리팹의 C가 0인지도 확인해보세용
프리팹 설정에서 문제가 있을 가능성이 높겠네요. 프리펩에는 E라는 스크립트가 연결되어 있고, 프리펩을 활용해서 Instantiate하는 스크립트는 F라는 타 스크립트입니다. Inspector 상에서 E 스크립트 내부의 C변수가 0으로 적힌 걸 보면, 이게 문제일지도 모르겠어요.
While문이 돈 이후에는 생성된 게임오브젝트들의 값들을 Find로 가져오니까 문제가 없는 거 같고요.
컴포넌트 E가 들어있는 애를 복사해서 E를 없애고 F를 addComponent하신다는건가요? 이해가 안되서요.. C가 0이면 C도 Instantiate할때 초기화해보세요
사람이라는 클래스(키, 몸무게, BMI)가 있고, 이 클래스는 Human.cs 에서 작성되었습니다. BMI는 사람 클래스 내부에서 키와 몸무게로 계산합니다. Human.cs는 사람 프리펩 안에 Add Component 되어 있습니다. HumanControl.cs 에서 "클론 게임오브젝트"를 Instantiate(사람 프리팹, Vertor3.zero, rotation) 합니다. 이후에 만든 클론 오브젝트에 이름을 바꾸고, clone,transform.localScale을 통해 키를 바꿉니다. 여기서 이제 각 사람의 BMI 합을 구하고, 사람의 수로 나누어 평균을 내려고 하는데 모든 클론 오브젝트를 만든 이후에는 정상적으로 BMI 평균을 낼 수 있으나 while문으로 클론을 찍어내는 과정이 문제입니다
public float humanLength void Start() { GetComponent(); Measurement = renderer.bounds.size; humanLength = Measurement.y; } 사람 키를 이렇게 구했습니다.
대략 복제 -> 키 변경 -> 복제된 애가 Start하자마자 자기 키를 humanLength라는 변수로 저장한다는 말씀 같은데 일단. humanLength, Measurement 둘다 Debug해보세요 수치 제대로 보시고 꼭꼭해보세용!!!!! 제 생각엔 정상적인 경우라면 복제 -> 정보변경 -> Start가 이루어지겠지만 복제 -> Start ->정보변경 순서면 당연히 humanlength는 초기 값이겠죠. 이 경우라면 GameObject B를 복제하고 아싸리 B.GetComponent().humanLength = 조정값;으로 해주면 생명주기 꼬이는 일은 없을 것 같네요.
생명주기 문제인 거 같습니다. 아직 해결되지는 않았지만, Debug.Log로 확인해 봤을 때 while문 안에서 0이 계속 출력 되니까요. 복제하고, 인풋 필드로 미리 받아온 조정값으로 복제의 humanLength를 다시 설정해야겠습니다. GetComponent()랑 GetComponent()<>의 차이에 대해서 공부 더해야겠네요...댓글 감사합니다