2016-07-06 6 views
0

스프라이트 렌더러에서 color.lerp를 사용하여 데이터 세트에있는 값에 따라 노랑색 사이를 보간합니다. 스프라이트의 투명도가 값에 의존하기를 원한다. 그래서 더 낮은 값이 더 투명해질 것이다. color.lerp는 정상적으로 작동하지만 현재 스프라이트의 알파 레벨을 값에 의존하는 데 어려움을 겪고 있습니다! 여기 내 코드는 지금까지 있습니다 :이 작업을 할color.lerp를 유니티 5로 사용하면서 알파 레벨을 변경했습니다.

using UnityEngine; 
using System.Collections; 

public class Intensity : MonoBehaviour { 

public float value; 
private float alpha; 

void Start() { 

    if (GetComponent<SpriteRenderer>()) { 
     SpriteRenderer r = GetComponent<SpriteRenderer>(); 
     r.color = new Color32(); 
     r.color = Color.Lerp (Color.yellow, Color.red, value/100); 
     } 

    if (GetComponent<MeshRenderer>()) { 
     MeshRenderer r = GetComponent<MeshRenderer>(); 
     Material m = r.material; 
     Color c = new Color(); 
     m.color = c; 
     alpha = Mathf.Lerp(0, 1, value/100) ; 
     c.a = alpha; 
    } 
} 

}

어떤 아이디어가 크게 감사하겠습니다!

이 코드에서 젠

답변

3

감사 :

Material m = r.material; 
    Color c = new Color(); 
    m.color = c; 
    alpha = Mathf.Lerp(0, 1, value/100) ; 
    c.a = alpha; 

Color 때문에이 구조체이며, 어떤 getset 특성 등 Material.color 것이다 pass by value한다. 즉, cm.color은 서로 영향을주지 않는 별개의 값입니다.

당신은 마지막 m.color에 할당하여이를 방지 할 수 있습니다

m.color.a = 0; 

을 당신을 대신 : 그건 당신이 이해할 수있는 경우이 작동하지 않습니다 이유를 참조, 이해가되지 않는 경우

Color c = Color.Lerp(newYellow, Color.red, value/100); 
c.a = Mathf.Lerp(0, 1, value/100); 
m.color = c; 

값을 가져 와서 변경하고 새 값을 할당해야합니다.

Color c = m.color; 
c.a = 0; 
m.color = c; 
+0

감사합니다. – jrogers12