게임 내부만으로는 광선 수신기 조사량 공식을 제대로 알아내기가 어려워서 스크립트를 뜯어봄
사진 잘 안 보이면 클릭해서 보셈
사진의 1281라인에 있는 RequestDysonSpherePower란 함수가 다이슨 스피어로부터 받아오는 전력을 계산해주는 함수로 보임
이 함수안에서 주목해볼만한 라인은 1285, 1286, 1293 정도가 있음
1285라인을 보면 increase라는 변수가 보이는데 이 변수의 용도는 다음 사진에서 언급하고 먼저 이 변수에 영향을 주는 요인을 살펴보겠음
뒤에 수식을 보면 grossRadius 와 sunDistance가 보일거임
grossRadius는 다이슨 스피어에서 스웜 궤도 반지름과 셀 반지름 중 가장 큰 반지름을 의미하고 sunDistance는 변수 이름을 보면 유추할 수 있듯이 행성으로부터 항성까지의 거리를 의미함
즉 수식에 따르면 increase라는 변수는 다이슨 스피어 최대 반지름에 비례하고 공전 궤도 반지름에 반비례한다고 볼 수 있음
다음 1286라인을 보면 normalized 변수가 보이는데 뒤 수식에 나오는 변수들 이름을 보면 대충 행성으로부터 항성까지의 방향 벡터를 단위 벡터로 표현한 것으로 유추할 수 있음
normalized 변수와 앞의 increase 변수는 1293라인의 EnergyCap_Gamma_Req란 함수에서 매개변수로 들어가는 모습을 볼 수 있는데 이 함수가 각 광선 수신기의 조사량을 계산해주는 것으로 추정됨
이 사진에서 157라인이 EnergyCap_Gamma_Req 함수의 구현 부분임
여기서 다른 부분은 필요 없고 159라인과 160라인의 num 변수만 주목하면 됨
이 변수가 광선 수신기의 조사량을 의미하는 것 같음
159라인의 수식중 앞 부분을 보면 sx * this.x + sy * this.y + sz * this.z 부분이 보일 거임
여기서 this.x this.y this.z는 조사해보니 행성 중심으로부터 광선 수신기까지의 방향 벡터의 단위 벡터인 것 같음
수학 좀 치는 사람이면 이미 눈치 깠을수도 있는데 이거 내적 값임
즉 그림으로 표현하면
이러케댐
주황 화살표는 각 벡터이고 초록 화살표는 내적 방향, 파란색은 내적값임
즉 광선 수신기의 위치에 따라 파랑색 길이 만큼 효율이 잘 나오거나 (항성을 향해 있을때 내적값은 0보다 큼) 덜 나오거나 (항성의 반대편을 향해 있을때 내적값은 0보다 작음) 하게되는 거임
한편 다음 뒤 수식을 보면 increase * 0.8f가 보일 거임
아까 설명을 미뤘던 increase 변수를 이 부분을 통해 이해할 수 있게댐
이 increase 변수는 다이슨 스피어의 반지름 또는 공전 궤도의 반지름에 따라 광선 수신기 효율에 추가 보너스를 주는 요소였던 것임
이 부분 덕에 다이슨 스피어가 크면 클수록, 행성이 항성에 가까우면 가까울수록 광선 수신기의 효율이 올라갔던 것임
그 외 수식의 뒷부분은 나도 모름 ㅋㅋ 대충 중력 렌즈와 관련있는 것 같기도 하고... 확실치는 않음
마지막으로 160라인에서 num 값을 0이상 1이하 값으로 좁혀주면 이 값이 조사량이 되는 거임
정리
1. 다이슨 스피어의 효율은 다이슨 스피어의 최외곽 셀 또는 스웜의 반지름이 클수록, 행성 공전 궤도의 반지름이 작을수록 더 크게 증가한다. 외형은 영향을 주지 않음.
2. 행성이 다이슨 스피어 내부에 있다 하더라도 모든 장소에서 조사량이 100%란 보장을 받을 수는 없다. 어느 상황이든 행성 뒷편에 있는 광선 수신기는 앞편에 있는 광선 수신기보다 조사량이 낮아질 수 있다.
근데 대부분 감각적으로 대충 분석한거라 틀린 부분이 꽤 있을지도 모름
수신기 효율과 관련된 정보가 딱히 안 보여서 뜯어본건데 다른 확실한 정보가 있으면 그걸 참고하는 게 나을 것 같음
게임은 당연히 C로 짰을줄 알았는데.. 이거 문법이 JAVA네? 헐..
유니티라 C#쓰는거 아님? C# 자체가 자바스럽게 디자인하는 목적도 있었음 스크립트 보니까 자바스러운 스타일로 개발하긴 했는데 C#만의 특징은 스크립트에서는 안보이네
유니티라 c# - dc App
소스가 자바스럽긴하네 ㅋㅋ
하나 더 추가하자면 스피어가 완성된 후에 솔라 세일을 날리는게 무의미한 행동은 아닌 것 같음. 공전 궤도 크게 잡고 쏘면 수신기의 효율을 올려주는 효과를 가져오니까