簡體   English   中英

如何在 Unity 2D 中禁用預制件?

[英]How to disable Prefabs in Unity 2D?

我正在開發一款 2d 本地多人平台游戲。 游戲中有障礙物(尖刺),當玩家與它們發生碰撞時,玩家將死亡。 我希望游戲玩家通過按鍵來決定是否要啟用或禁用尖刺(鏈接指向有助於理解我的問題的圖像)。 我已經為此編寫了一個腳本並將其添加到我的 dontdestroyOnLoad GameManager 中。 所以我建造的所有尖峰都是相同的預制件。 我的想法是禁用 Project 文件夾中的主 Prefab 以禁用每個場景中的所有尖峰,直到您按下一個鍵再次重新激活它們。 問題是,只有項目面板中的紋理本身被禁用,而不是層次結構中的尖峰預制件,因為預制件變成了常規的游戲對象。 我怎樣才能解決這個問題?

我的腳本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//using System.Threading;

public class DisableSpikes : MonoBehaviour
{
[Header("Spikes")]
public KeyCode disableSpikes;
public float time;
public GameObject prefabSpikes;

public bool toggleSpikes = true;

[Header("Player Green")]

public KeyCode disableGreen;
public GameObject prefabGreen;

public bool toggleGreen = true;


[Header("Reset Score")]
public KeyCode resetScore;




    // Start is called before the first frame update
    

    // Update is called once per frame
   


   void Update()
    {
    
     if (Input.GetKeyDown(disableSpikes) && toggleSpikes == true)
        {
            prefabSpikes.SetActive(false);
            Debug.Log("Disable");
            //Thread.Sleep(1000);
            Invoke("SetFalse", time); 
        }
    
    if (Input.GetKeyDown(disableSpikes) && toggleSpikes == false)
        {
            prefabSpikes.SetActive(true);
            Debug.Log("Anable");
            //Thread.Sleep(1000);
            Invoke("SetTrue", time);
        }
        
     if (Input.GetKeyDown(disableGreen) && toggleGreen == true)
        {
            prefabGreen.SetActive(false);
            Debug.Log("Disable");
            //Thread.Sleep(1000);
            Invoke("SetFalse", time); 
        }
    
    if (Input.GetKeyDown(disableGreen) && toggleGreen == false)
        {
            prefabGreen.SetActive(true);
            Debug.Log("Anable");
            //Thread.Sleep(1000);
            Invoke("SetTrue", time);
        }
        
    if (Input.GetKeyDown(resetScore))
        {
            
            ScoreScriptBlue.scoreValueBlue = 0;
            ScoreScriptRed.scoreValueRed = 0;
            ScoreScriptGreen.scoreValueGreen = 0;
            RoundScript.scoreValueRound = 0;
            TimeScript.scoreValueTime = 0;
        }
        
    
    }
    
    public void SetFalse()
    {
        toggleGreen = false;
        toggleSpikes = false;
    }
    
    public void SetTrue()
    {
        toggleGreen = true;
        toggleSpikes = true;
    }
}

無效更新(){

if (Input.GetKeyDown(disableSpikes) && toggleSpikes == true){
  // show
  // renderer.enabled = true;
  gameObject.GetComponent<Renderer>().enabled = true;

}

 if (Input.GetKeyDown(disableSpikes) && toggleSpikes == false) {

  // hide
  // renderer.enabled = false;
  gameObject.GetComponent<Renderer>().enabled = false;

} }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM