사실 API 만 알면 정말 뭣도 아닌 수준의 스크립트네요. 설명하는 선생님이 잘 설명해 주셔서 된듯. 정리한 후에 이걸 가지고 실무데이터로 만들고 컨펌받아봐야겠습니다.
앞서 얘기한대로, 이걸 받아와서 쉐이더의 일정 색상을 변화시켜 보겠습니다.
잘 되면 나중에 텍스쳐도 받아와서 하도록 해야겠네요 :)
그럼 먼저 이 코드에서부터 시작합니다.

계속 업데이트에서 놀겁니다.
일단 아까 만든, 신에 붙어 있는 색상 출력하는 스크립트에서 칼라값을 받아와야겠지요.
그럼 그걸 찾아가는 명령이 GameObject 입니다 .
그러므로 이렇게 찾아갑니다.
GameObject.Find("_GameManager");
게임 메니져라고 하는 오브젝트를 찾아갑니다. 거기 안에 아까 만든 스크립트가 있거든요.
그리고 이걸 다시 Object 형식의 변수에 집어 넣었습니다. 쓰기 편하게 하려구요.
오브젝트라고 하는 단위가 존재하는게 신기하네요. ㅎㅎ
GameObject GM = GameObject.Find("_GameManager");
그리고 다음 행동을 하기 전에, 여기 값이 제대로 들어왔나를 검색하는 코드를 만듭니다.
만약 값이 제대로 들어오지 않았다면 디버그 메시지를 출력합니다.
if (GM != null)
{
}
else
{
Debug.Log(“GM is empty”);
}
이제 제대로 들어왔을때 어떻게 할 것인가를 처리합니다.
GM 오브젝트가 오브젝트를 잘 찾아 물고 들어왔으니, 이 오브젝트에 들어있는 하위정보를 가져오면 되겠지요.
그리고 그 하위정보중에서도 아까 만든 스크립트인 TsSceneAmbientColor 라고 하는 컴포넌트를 찾아서 거기 값을 받아오면 될겁니다. 뭐 이거 부르기만 하면 칼라가 호출되게 되어 있으므로 문제없겠죠.
그러므로 ,
if (GM != null)
{
GM.GetComponent(“TsSceneAmbientColor”);
}
else
{
Debug.Log(“GM is empty”);
}
라고 추가해줍니다. GM.GenComponent 라고 하는 명령으로 말이죠.
이걸 접근하면, 칼라값이 리턴됩니다.
그러므로
Color FinalColor = GM.GetComponent(“TsSceneAmbientColor”);
이런 식으로 칼라값을 받아와야겠지요.
그렇지만 왼쪽은 Color고, 오른쪽은 Object입니다. 형식이 다르죠.
그래서 ‘형 변환’ 이 필요합니다. 형 변환에는 여러 형식이 있지만.
Color FinalColor = GM.GetComponent(“TsSceneAmbientColor”) as Color;
그래서 이렇게 받아오면 될 것 같지만, 하지만 이렇게는 안됩니다.
형 변환을 하려면 부모자식간의 관계여야지, 이렇게 Color 같은 동떨어진 녀석으로 바로 갈 수가 없기 때문이지요.
때문에 Object인 GM의 자식 클래스인, TsSceneAmbientColor 로 형변환 해야지 난데없이 Color로 넘어올 수는 없는 거지요.
즉
TsSceneAmbientColor FinalColor = GM.GetComponent(“TsSceneAmbientColor”)as TsSceneAmbientColor
이렇게 되어야 정상입니다.
그리고나서, 다시 업데이트의 맨 처음에다가 칼라 변수를 하나 선언해 줍니다.
Color Acolor = new Color();
C# 특징인 객채 생성이지요.
그리고 이걸 이용해서 , 칼라값을 받아옵니다.
대충 이 정도가 되겠네요.
void Update () {
Color Acolor = new Color();
GameObject GM = GameObject.Find("_GameManager");
if (GM != null)
{
TsSceneAmbientColor FinalColor = GM.GetComponent(“TsSceneAmbientColor”)as TsSceneAmbientColor;
Acolor = FinalColor.SceneColor;
}
else
{
Debug.Log(“GM is empty”);
}
이제 여기서 나온 Acolor 를 맨 마지막 출력에 대입시켜주면 끝입니다.
renderer.material.SetColor("_UpperGlobalLight",Acolor);
이렇게 하면 완성.
// Update is called once per frame
void Update () {
Color Acolor = new Color();
GameObject GM = GameObject.Find("_GameManager");
if (GM != null)
{
TsSceneAmbientColor FinalColor = GM.GetComponent(“TsSceneAmbientColor”)as TsSceneAmbientColor;
Acolor = FinalColor.SceneColor;
}
else
{
Debug.Log(“GM is empty”);
}
renderer.material.SetColor("_UpperGlobalLight",Acolor);
}
여기에 FinalColor 가 들어왔는지 안들어왔는지 검사하는 if문 하나 더 넣어주면 끝나겠지요 :)
풀버전 코드는 다음과 같습니다.
using UnityEngine;
using System.Collections;
public class TsEnvLightColor : MonoBehaviour
{
public Color MainAmbient ;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
Color Acolor = new Color();
GameObject GM = GameObject.Find("_GameManager");
if (GM != null)
{
//TsSceneAmbientColor SA = GM.GetComponent(“TsSceneAmbientColor”) as TsSceneAmbientColor;
TsSceneAmbientColor SA = GM.GetComponent();
if (SA != null)
{
//Acolor = SA.GetAmbinetColor();
Acolor = SA.SceneColor;
}
}
else
Debug.Log(“Not Found GM!!! “);
if(renderer.material.HasProperty(”_UpperGlobalLight”) == true )
renderer.material.SetColor("_UpperGlobalLight",Acolor);
else
Debug.Log(“Not Found UpperGlobalLight property !!! “);
}
}
잘 되네요.

실시간으로 게임 메니져에서 색상을 바꾸니 바뀌어서 넘어옵니다. 굿.