【问题标题】:'Transform' does not contain a definition for 'activeSelf' [closed]“转换”不包含“activeSelf”的定义[关闭]
【发布时间】:2022-01-14 11:45:48
【问题描述】:

我正在尝试使用 if 语句实例化一个预制件,该语句在函数中具有一个活动的 self。现在我想检查转换后的对象是否处于活动状态。如果我在 Transform 后面写 .activeSelf,它会给我一个错误。这是给我带来问题的部分:

public Transform SpawnPointBlue, SpawnPointRed;
public GameObject Mercury;

    public void SpawnMercury()
    {
        if(SpawnPointBlue.activeSelf == true)
        {
            Instantiate(Mercury, SpawnPointBlue.position, SpawnPointBlue.rotation);
        }

        if(SpawnPointRed.activeSelf == true)
        {   
            Instantiate(Mercury, SpawnPointRed.position, SpawnPointRed.rotation);
        }
    }

有什么想法吗?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    activeSelfGameObject 的属性,而不是 Transform

    https://docs.unity3d.com/ScriptReference/GameObject-activeSelf.html

    所以,你会这样做:

        if(SpawnPointBlue.gameObject.activeSelf == true)
        {
            Instantiate(Mercury, SpawnPointBlue.position, SpawnPointBlue.rotation);
        }
    

    但是,请注意activeSelf 仅根据其自身的本地设置指示该对象是否处于活动状态。例如,如果其父对象处于非活动状态,它在场景中仍可能处于非活动状态。我建议改用activeInHierarchy

    https://docs.unity3d.com/ScriptReference/GameObject-activeInHierarchy.html

        if(SpawnPointBlue.gameObject.activeInHierarchy)
        {
            Instantiate(Mercury, SpawnPointBlue.position, SpawnPointBlue.rotation);
        }
    

    【讨论】:

      【解决方案2】:

      我认为您的问题是您正在检查转换组件。 试试这个吧。

      public GameObject SpawnPointBlue, SpawnPointRed;
      public GameObject Mercury;
      
          public void SpawnMercury()
          {
              if(SpawnPointBlue.activeSelf == true)
              {
                  Instantiate(Mercury, SpawnPointBlue.transform.position, SpawnPointBlue.transform.rotation);
              }
      
              if(SpawnPointRed.activeSelf == true)
              {   
                  Instantiate(Mercury, SpawnPointRed.transform.position, SpawnPointRed.transform.rotation);
              }
          }
      

      如果这不起作用,试试这个

        public GameObject SpawnPointBlue, SpawnPointRed;
      public GameObject Mercury;
      
          public void SpawnMercury()
          {
              if(SpawnPointBlue.isActive)
              {
                  Instantiate(Mercury, SpawnPointBlue.transform.position, SpawnPointBlue.transform.rotation);
              }
      
              if(SpawnPointRed.isActive)
              {   
                  Instantiate(Mercury, SpawnPointRed.transform.position, SpawnPointRed.transform.rotation);
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2021-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-14
        • 1970-01-01
        • 1970-01-01
        • 2016-08-31
        • 1970-01-01
        相关资源
        最近更新 更多