2016-06-15 8 views
0

У меня есть прозрачная текстура забора цепи. Я хочу, чтобы забор исчезал, когда игрок приближается к направлению z. Проблема, с которой я сталкиваюсь, заключается в том, что, поскольку забор прозрачен, слайдер непрозрачности исчезает и использует прозрачность изображения. (Я хочу прозрачную текстуру выгорает) Мой текущий код:Изменение непрозрачности прозрачной текстуры

public class WallFader : MonoBehaviour { 


public GameObject wallone; 

private Vector3 wallonetransform; 

private Color wallonecolor; 


public GameObject player; 
private Vector3 playerposition; 

private float PPX; 
private float PPZ; 

// Use this for initialization 
void Start() 

{ 
    wallonetransform = wallone.GetComponent<Transform>().position; 
    wallonecolor = wallone.GetComponent<Renderer>().material.color; 

} 

// Update is called once per frame 
void Update() { 


    playerposition = player.transform.position; 
    PPX = playerposition.x; 
    PPZ = playerposition.z; 

    // Distance to the large flat wall 
    float wallonedist = wallonetransform.z - PPZ; 

    if (wallonedist > 10) 
    { 
     wallonecolor.a = 0; 
    } 

    else 
    { 
     //fade in script 
    } 

    } 

Забор никогда не исчезает или исчезает, когда wallonedist> 10

ответ

0

Color является struct, что означает, что изменение не изменит экземпляр Renderer. Это копия color от Renderer. Если вы измените цвет, вам нужно снова назначить весь цвет на Renderer, чтобы он вступил в силу.

public class WallFader : MonoBehaviour 
{ 
    public GameObject wallone; 

    private Vector3 wallonetransform; 

    private Color wallonecolor; 
    Renderer renderer; 

    public GameObject player; 
    private Vector3 playerposition; 

    private float PPX; 
    private float PPZ; 

    // Use this for initialization 
    void Start() 
    { 
     wallonetransform = wallone.GetComponent<Transform>().position; 
     renderer = wallone.GetComponent<Renderer>(); 
     wallonecolor = wallone.GetComponent<Renderer>().material.color; 
    } 

    // Update is called once per frame 
    void Update() 
    { 


     playerposition = player.transform.position; 
     PPX = playerposition.x; 
     PPZ = playerposition.z; 

     // Distance to the large flat wall 
     float wallonedist = wallonetransform.z - PPZ; 

     if (wallonedist > 10) 
     { 
      wallonecolor.a = 0; 
      renderer.material.color = wallonecolor; //Apply the color 
     } 

     else 
     { 
      //fade in script 
     } 
    } 
} 
+0

Благодарю вас. Для тех, кто читает позже, я забыл назначить цвет назад. wallone.GetComponent () .material.color = wallonecolor; необходимо после wallonecolor.a = 0; – Aoradon

+0

@Aoradon Добро пожаловать. Не забывайте указывать ответ, если ваша проблема решена. – Programmer

Смежные вопросы