当前位置:   article > 正文

Unity GetComponent方法隐藏/显示游戏物体_getcomponent

getcomponent

想要隐藏/显示物体,最简单粗暴的方法是使用SetActive方法,但是这会导致其挂载的脚本也一起失效。
如果单单只是想让游戏物体看不见,可以利用GetComponent方法

这是要隐藏的物体的对象:

private GameObject hideObject;
  • 1

单个物体隐藏方法:

hideObject.GetComponent<Renderer>().enabled = false;
  • 1

物体和它的子物体一起隐藏的方法:

foreach (Renderer renderer in hideObject.GetComponentsInChildren<Renderer>())
{
    renderer.enabled = false;
}
  • 1
  • 2
  • 3
  • 4

显示物体方法同理。

再加其他细节的完整代码:
(可以同时隐藏/显示多个物体和它的子物体)

using UnityEngine;

/// <summary>
/// 隐藏/显示物体
/// </summary>
public class HideOrShowObject : MonoBehaviour
{
    [Header("要隐藏的物体")]
    [SerializeField] private GameObject[] hideObjects;
    [Header("要显示的物体")]
    [SerializeField] private GameObject[] showObjects;

    /// <summary>
    /// 隐藏物体
    /// </summary>
    protected void Hide()
    {
        foreach (GameObject hObject in hideObjects)
        {
            foreach (Renderer renderer in hObject.GetComponentsInChildren<Renderer>())
            {
                renderer.enabled = false;
            }
        }
    }

    /// <summary>
    /// 显示物体
    /// </summary>
    protected void Show()
    {
        foreach (GameObject sObject in showObjects)
        {
            foreach (Renderer renderer in sObject.GetComponentsInChildren<Renderer>())
            {
                renderer.enabled = true;
            }
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

很好,方法有了,再写个脚本继承它,使玩家进入触发器时触发方法。
完整代码:

using UnityEngine;

/// <summary>
/// 挂在触发器下
/// 隐藏/显示物体
/// </summary>
public class TriggerHOrSObj : HideOrShowObject
{
    [Header("控制触发类型")]
    [Tooltip("anyState:进入/离开触发器都可以触发\ntriggerEnter:进入触发器时触发\ntriggerExit:离开触发器时触发")]
    [SerializeField] private TriggerType triggerType = TriggerType.anyState;

    private void OnTriggerEnter(Collider other)
    {
        if (triggerType == TriggerType.triggerEnter || triggerType == TriggerType.anyState)
        {
            Hide();
            //Show();
        }
    }

    private void OnTriggerExit(Collider other)
    {
        if (triggerType == TriggerType.triggerExit || triggerType == TriggerType.anyState)
        {
            Hide();
            //Show();
        }
    }
}

/// <summary>
/// 触发器触发条件类型
/// </summary>
public enum TriggerType
{
    anyState,
    triggerEnter,
    triggerExit
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

效果图:

隐藏/显示游戏物体
看都看了,点个赞呗~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/125585
推荐阅读
相关标签
  

闽ICP备14008679号