2014-11-24 48 views
-1

我將簡短介紹一下。我有一個gameobject,它有一個精靈渲染器和一個粒子渲染器。我想要做的是,當我把它從腳本的命令,我想遊戲對象的精靈渲染器來改變材料,但如果我不喜歡這樣寫道:`在Unity3D中的一個GameObject中更改多種材質

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(生命值)。如果hp變量低於60,它會將門的外觀改變爲破門。然而,當我這樣做的時候,它也會改變粒子渲染器的材質,並且它會開始打破小碎門,而不是破門而入。我如何獲得它只需更改精靈渲染器的材質?我嘗試了無數次,但我無法得到它的工作:(順便說一句,我不能添加任何孩子到這個gameobject,它會搞砸了很多事情。提前致謝!:)

+0

出這樣的代碼是不是在描繪實際問題,或者問題就是一個很好的例子...您還需要展示如何初始化MyMaterial對象,以顯示Class結構以及如何實例化對象。基本上我在說的是顯示所有與您的問題有關的所有相關代碼,謝謝 – MethodMan 2014-11-24 18:23:16

+0

@DJKRAZE編輯和做它像你問:)​​ – Nikaoto 2014-11-24 18:30:20

+0

仍然看起來像很多空引用基於我所看到的看不到你在哪裏設置或新建這個'brokenMat'你有沒有看過這個代碼......看看你看到的是什麼和預期的結果有關的東西會跳出來。 – MethodMan 2014-11-24 18:36:34

回答

0

我發現自己修復。基本上,我所做的是,我添加了一個ParticleRenderer,並從gameobject中獲取組件,就像我用粒子發射器所做的一樣。於是我進口的材料只是爲粒子渲染和改變精靈渲染器的材料後,我也改變了粒子渲染的:

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); 

     } 
    } 
} 
}  
相關問題