繁体   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