关于游戏对象隐藏和重新显示之前触发的消息。

今有需求,需要在物体隐藏/显示的同时触发一些事件,经过查看API文档,发现GameObject并没有相关接口,但是脚本的基类MonoBehaviour里面有一下两个函数:

void OnEnable()        // 脚本生效时触发

void OnDisable()      // 脚本失效时被触发


我做了如下测试:

Test脚本挂载在一个cube下,Control脚本挂载在Main Camera下,并在编辑器中,把cube的赋给Control脚本中的public GameObject obj;


</pre><pre name="code" class="csharp">// Test.cs
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour
{
	void Start ()
    {
        //DontDestroyOnLoad(gameObject);
	}
	
	void Update ()
    {
	}

    void OnEnable()
    {
        Debug.Log("script was added              " + Time.frameCount);
    }


    void OnDisable()
    {
        print("script was removed                " + Time.frameCount);
    }
}


// Control.cs
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class control : MonoBehaviour
{
    public GameObject obj;
	// Use this for initialization
	void Start ()
    {
	
	}
	
	// Update is called once per frame
	void Update ()
    {
	    if(Input.GetMouseButtonDown(0))
        {
            obj.SetActive(!obj.activeSelf);
            Debug.Log("Controller :         " + Time.frameCount);
        }

        if (Input.GetMouseButtonDown(1))
        {
            SceneManager.LoadScene(1);
        }
    }
}



运行时,Log日志如下图






测试证明:

1、OnEnable会在脚本从无效变成有效时被触发,包括第一次进入场景时也会被触发(如果初始设置为无效则不会);

2、OnDisable会在脚本从有效变成无效是被触发,包括退出场景时也会被触发;

3、上述两个消息的触发在gameObject的ActiveSelf被改变的同一帧执行完毕,所以完全满足 “在游戏对象在隐藏和显示时被触发”

### 回答1: 您可以使用Unity引擎来实现这个功能。可以通过将对象的渲染器组件禁用来隐藏物体,并通过其他组件来触发对象。同,还可以使用Collider组件来实现对象触发的功能,即使该对象已被隐藏。您可以在代码中使用以下方法来禁用渲染器组件: gameObject.GetComponent<Renderer>().enabled = false; 这将禁用Game Object的渲染器组件,但是它仍然可以与其他Game Object进行交互。请确保在必要启用渲染器组件。 ### 回答2: 要通过代码将一个物体隐藏但仍然能够被触发,可以使用以下方法: 首先,可以使用Unity游戏引擎提供的SetActive()函数隐藏物体。SetActive()函数可以将物体的活动状态设置为激活或非激活。将物体的活动状态设置为非激活,该物体将被隐藏。 然后,在隐藏物体之前,需要将物体的碰撞体设置为触发器。在Unity中,可以使用Collider组件来为物体添加碰撞体。通过将碰撞体的isTrigger属性设置为True,即可将其设为触发器。这样,在将物体隐藏后,其仍然可以与其他物体进行交互。 最后,在程序中,可以使用函数事件监听来实现触发效果。例如,可以在脚本中定义一个函数,当与隐藏的物体发生交互,执行特定的代码逻辑。然后,可以使用事件监听器来监测与物体的交互,并触发相应的函数。 通过以上方法,就可以实现将物体隐藏但仍能被触发的效果。当隐藏的物体与其他物体发生碰撞或触发,可以根据具体需求执行相应的代码逻辑。 ### 回答3: 通过代码将一个物体隐藏,但仍然能够被触发可以通过以下步骤实现: 1. 隐藏物体:使用代码将该物体的渲染组件或者整个物体的active属性设置为false。这样物体将不再在屏幕上可见。 2. 编写触发逻辑:创建一个脚本,为该物体添加触发逻辑。该脚本可以是一个碰撞检测脚本或者是在特定条件下执行的函数。根据需要,可以使用Unity或其他游戏引擎的内置函数事件或者自定义事件来实现相应的触发方式。 3. 触发事件:当触发条件满足,执行相应的触发事件。这可能包括改变场景中其他物体的状态、播放声音或动画等。 4. 恢复物体可见:在相应的触发事件完成后,需要再次显示隐藏的物体。通过代码将该物体的渲染组件或active属性设置为true,使其重新在屏幕上可见。 需要注意的是,具体的实现方案可能因使用的游戏引擎、编程语言或需求的不同而有所变化。上述步骤仅提供了一种通用的实现思路。具体实现可以根据需求对步骤进行适当调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值