Tutorial     Tip     Trouble Shooting     Research     Read

2015년 2월 26일 목요일

change material color

히어로스 차지 처럼 스킬 사용할때, 맵과 스킬 사용하지 않는 유닛들의 color 값을 어둡게 해주어야했음

1)문제점 
해당 기능이 동작할때마다 material이 증가한다는것.

원인&해결
renderer.material을 사용하기 때문인데,
1) 이렇게 새로 생성된 material을 삭제 하고
2) 원래의 color로 돌려 놔야함.

1)은 해당 material을 DestroyImmediate() 하면됨.
2)를 어떻게 할것인가? 즉 원래의 sharedMaterial을 사용하게끔 어떻게 해주는가?

요렇게 하면됨



2)문제점 
material을 생성해서 할당할 필요가 있어서(*1) 그렇게 했더니 material 개수가 계속 증가.

원인&해결
temp material을 render에 할당할때, 복사가 일어나는 것 같음 해결 ) temp material을 따로 또 삭제해주면됨

(*1) : 이후에 문제 상황이 있어서 이 페이지 볼일이 있었는데, 요것이 기억이 안남 ;;;
살펴보니 1)문제점의 방식을 사용해서 sharedMaterial 로 돌렸을때, material이 날아가 버리는 현상이 나타났음. 이 현상을 해결하려고 material을 새로 생성했던거 같음. 날아가버리는 원인은 이미 color change전에 sharedMaterials가 복사된 넘으로 들어가 있고, materials도 같은 넘으로 세팅되어있어서, rollback에서 materials destroy할때, sharedMaterials도 날아가 버렸던거였음.
->[2015.3.19 추가] sharedMaterials가 Instantiated material로 세팅되어있는 것이 코딩상의 버그일거라 생각했는데, 테스트해보니 material을 사용하면 해당material이 새로 생성됨과 동시에 sharedMaterial에 생성된 놈으로 설정해주고 있음. 그래서 이미 sharedMaterial이 instantiated 된 걸로 세팅되어있는 상태에서 backup하고 color change하고 rollback하면, matrials를 삭제할때 sharedMaterials것도 삭제되고 backup된것도 날아가버리는 거였음


3)문제점
테스트 프로그램에서 _temp_material_array를 renderer.material destory 할때 같이 하는 것에서, 실제로는 renderer.material에 할당후에 바로 destroy 해주는 것으로 했더니 화면에서 material이 아에 없음...

원인&해결
renderer.materials 에 할당할때 실제 복사는 나중에 이루어 지는듯. test proprogram처럼 temp_material을 저장해 두었다가 renderer.materials destroy할때 같이 했더니 잘됨

댓글 없음:

댓글 쓰기