2014-11-24 4 views
-1

Я сделаю это коротким. У меня есть gameobject, и у него есть средство визуализации спрайтов и средство рендеринга частиц. То, что я хочу сделать, это, когда я даю ему команду из сценария, я хочу спрайт визуализатор в GameObject изменить материал, однако, если я делаю это так: `Измените несколько материалов в одном GameObject в Unity3D

using UnityEngine; 
using System.Collections; 

public class DoorBehav : MonoBehaviour { 

public static float DoorHp = 100f; 

public TextMesh HpText; 
public Material brokenMat; //the material I want to use for the sprite renderer 

private GameObject hero; 
ParticleEmitter partEmit; 

void Start() { 
    hero = GameObject.Find("Hero"); 
    partEmit = GetComponent<ParticleEmitter>(); 
    HpText = transform.FindChild ("DoorHp").GetComponent<TextMesh>() as TextMesh; 
    HpText.color = Color.green; 
} 

void Update() { 
    if (Vector3.Distance (hero.transform.position, transform.position) < 1.8f) 
     { 
     HeroBehaviour.agent.speed = 0; 
     DoorHp-=1f; 
     partEmit.Emit(); 
     HpText.text = ((Mathf.FloorToInt(DoorHp)).ToString()+"%"); 

     if(DoorHp <=60f) 
     { 
      transform.renderer.material = brokenMat; 
      HpText.color = Color.yellow; 

     } 
     if(DoorHp <=30f) 
     { 
      HpText.color = Color.red; 
     } 
     if(DoorHp <=0) 
     { 

      //play sound : destroy door 
      HeroBehaviour.agent.speed = HeroBehaviour.moveSpeed; 
      Destroy(this.gameObject); 

     } 
    } 
} 

}

`
В принципе, это дверь, и когда герой приближается к ней, он теряет hp (hitpoints). Если переменная hp ниже 60, она изменяет внешний вид двери на сломанную дверь. Однако, когда я это делаю, он также меняет материал средства визуализации частиц, и он начинает выливать крошечные маленькие сломанные двери вместо дерби из сломанной двери. Как заставить его ТОЛЬКО изменять материал средства визуализации спрайтов? Я пробовал много раз, но я не могу заставить его работать :(Кстати, я не могу добавить детей в этот игровой объект, это испортило бы многие вещи. Спасибо заранее! :)

+0

показывает код, как это не является хорошим примером того, изображая, что реальная проблема и или вопрос ... вам нужно показать также, как вы инициализируете объект MyMaterial, можете ли вы показать структуру класса, а также то, как вы создаете объект? .. в основном то, что я говорю, это «Показать весь соответствующий код», который относится к вашей проблеме/вопросу под рукой, спасибо – MethodMan

+0

@DJKRAZE отредактирован и сделал это, как вы просили :) – Nikaoto

+0

по-прежнему выглядит как много нулевых ссылок на основе того, что я вижу «Не видите, где вы даже устанавливаете или создаете этот« битмарт », вы прошли через этот код .., чтобы увидеть, что что-то подскакивает в отношении того, что вы видите, или ожидаемых результатов ..? – MethodMan

ответ

0

Я нашел исправить себя. В основном, что я сделал, я добавил ParticleRenderer и получил компоненты из игрового объекта так же, как и с излучателем частиц. Тогда я импортировал материал только для визуализатора частиц и после изменения материала спрайта рендерера, я также изменил визуализатор частицы:

using UnityEngine; 
using System.Collections; 

public class DoorBehav : MonoBehaviour { 

public static float DoorHp = 100f; 

public TextMesh HpText; 
public Material brokenMat; 
public Material particleMat;//the material for the particle renderer 

private GameObject hero; 
ParticleEmitter partEmit; 
ParticleRenderer partRend;// the new particle renderer 

void Start() { 
    hero = GameObject.Find("Hero"); 
    partEmit = GetComponent<ParticleEmitter>(); 
    partRend = GetComponent<ParticleRenderer>();//importing the particle renderer 
    HpText = transform.FindChild ("DoorHp").GetComponent<TextMesh>() as TextMesh; 
    HpText.color = Color.green; 
} 

void Update() { 
    if (Vector3.Distance (hero.transform.position, transform.position) < 1.8f) 
     { 
     HeroBehaviour.agent.speed = 0; 
     DoorHp-=1f; 
     partEmit.Emit(); 
     HpText.text = ((Mathf.FloorToInt(DoorHp)).ToString()+"%"); 

     if(DoorHp <=60f) 
     { 
      transform.renderer.material = brokenMat; 
      partRend.material = particleMat;//changing the particle renderer's material 

      HpText.color = Color.yellow; 

     } 
     if(DoorHp <=30f) 
     { 
      HpText.color = Color.red; 
     } 
     if(DoorHp <=0) 
     { 

      //play sound : destroy door 
      HeroBehaviour.agent.speed = HeroBehaviour.moveSpeed; 
      Destroy(this.gameObject); 

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