2017-01-19 5 views
0

私はプログラミングのノブであり、GameObjectを作成しようとしていて、設定された時間(秒)の間、非アクティブ化して再びアクティブにしています。たとえば、星がゆっくりと点滅してから、クールな見た目の効果。 SetActive(false)を使用してこのメ​​ソッドを使用するより良い方法がある場合は、どうしたらいいですか?あなたのメソッドを教えてください - これは私のコードです。ごめんなさい。期限Blink GameObject

みんなありがとう

//Timers 
public float ScoreTimer; 
public float[] TimeMarkStamp; 

//Scoring 
public int totalCollStars; 
[Space] 
public int maxStars = 5; 

public GameObject[] StarImages; 


// Use this for initialization 
void Start() 
{ 


} 

// Update is called once per frame 
void Update() 
{ 
    ScoreTimer += Time.deltaTime; 
    if (ScoreTimer <= TimeMarkStamp[0]) 
    { 
     Debug.Log("It works"); 
     StarImages[0].SetActive(false); 
    } 
    else if (ScoreTimer <= TimeMarkStamp[1]) 
    { 
     Debug.Log("It workds" + TimeMarkStamp[1]); 
     StarImages[1].SetActive(false); 
    } 
    else if (ScoreTimer <= TimeMarkStamp[2]) 
    { 
     Debug.Log("It works" + TimeMarkStamp[2]); 
     StarImages[2].SetActive(false); 
    } 
    else if (ScoreTimer <= TimeMarkStamp[3]) 
    { 
     //This is not working 
     InvokeRepeating("flickerEffect", 3f, 1f); 
    } 
} 

void flickerEffect() 
{ 
    bool flickCheck = false; 


    if (flickCheck == false) 
    { 
     StarImages[3].SetActive(true); 
     flickCheck = true; 
    } 
    else if (flickCheck == true) 
    { 
     StarImages[3].SetActive(false); 
     flickCheck = false; 

    } 
} 

}

+0

「コルーチン」を探したり、グーグルグーグルで試してみてください。しかし、ゲームを作るにはプログラミング自体がかなり強くなければなりません。 – AgentFire

+0

真実で簡単な方法はコルーチンを使うことですが、何を達成するかによってはオブジェクトを見えなくする他の方法を使いたいかもしれません。 –

+0

よろしくお願いします。ありがとう、ヒープが入っています。 –

答えて

1

アウトが のsetActive(偽)と何を使用して行われ、この方法を使用することのより良い方法がある場合はない

はい、SetActive機能を使用する以外にも良い方法があります。 GameObjectのアルファベットcolor0から1に前後に変更する必要があります。その後、SetActiveでGameObjectを無効にすることができます。これにより、SetActive関数を繰り返し呼び出すと、どのくらいのゴミが生成されるかが節約されます。

これは3Dのゲームオブジェクトである場合は、フェードまたは透明に不透明(デフォルト)からレンダリングモードを変更。

これを行うことができ、簡単な機能:

void blink(GameObject obj, float blinkSpeed, float duration) 
{ 
    StartCoroutine(_blinkCOR(obj, blinkSpeed, duration)); 
} 

IEnumerator _blinkCOR(GameObject obj, float blinkSpeed, float duration) 
{ 
    obj.SetActive(true); 
    Color defualtColor = obj.GetComponent<MeshRenderer>().material.color; 

    float counter = 0; 
    float innerCounter = 0; 

    bool visible = false; 

    while (counter < duration) 
    { 
     counter += Time.deltaTime; 
     innerCounter += Time.deltaTime; 

     //Toggle and reset if innerCounter > blinkSpeed 
     if (innerCounter > blinkSpeed) 
     { 
      visible = !visible; 
      innerCounter = 0f; 
     } 

     if (visible) 
     { 
      //Show 
      show(obj); 
     } 
     else 
     { 
      //Hide 
      hide(obj); 
     } 

     //Wait for a frame 
     yield return null; 
    } 

    //Done Blinking, Restore default color then Disable the GameObject 
    obj.GetComponent<MeshRenderer>().material.color = defualtColor; 
    obj.SetActive(false); 
} 

void show(GameObject obj) 
{ 
    Color currentColor = obj.GetComponent<MeshRenderer>().material.color; 
    currentColor.a = 1; 
    obj.GetComponent<MeshRenderer>().material.color = currentColor; 
} 

void hide(GameObject obj) 
{ 
    Color currentColor = obj.GetComponent<MeshRenderer>().material.color; 
    currentColor.a = 0; 
    obj.GetComponent<MeshRenderer>().material.color = currentColor; 
} 

使用上

void Start() 
{ 
    blink(gameObject, 0.2f, 5f); 
} 

これがSpriteRenderある場合は、obj.GetComponent<SpriteRenderer>().colorですべてobj.GetComponent<MeshRenderer>().material.colorコードを交換する必要があります。

+0

おかげさまでヒープが助けになりました。^_^awsomeの説明と非常に明確 –

関連する問題