Unity3D——GetComponentsInChildren<T>()方法详解

最近使用GetComponentsInChildren在做游戏获取孩子节点对象的时候遇到了问题,索性就花点时间理解透彻来,省的下次进坑;总结了三种情况,使用需谨慎。


一、能获取到自己的情况

Transform[] trans = GetComponentsInChildren<Transform>();

因为root对象以及其6个子对象都有Transform组件,所以获取到的size是7,包含了root自身节点。


二、不能获取到自身的情况


TestComponent[] trans = GetComponentsInChildren<TestComponent>();

此时是在root下面的子对象上挂在了TestComponent脚本(标识作用),这时没有获取到root自身节点


三、获取到孩子的孩子对象的情况


TestComponent[] trans = GetComponentsInChildren<TestComponent>();
此时获取到的结点包含了儿子节点、孙子节点和曾孙子节点,(看数组的顺序,感觉有点像深度优先搜索的遍历方式)。


  • 14
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
首先,需要了解什么是 PersistentStateComponent<T> 接口。它是 Intellij IDEA 平台中的一个接口,用于在 IDE 关闭后保存插件的状态,以便在下次启动时恢复状态。T 是状态数据的类型,可以是任何可序列化的对象。 接下来,我们可以通过以下步骤来实现一个插件,并使用 PersistentStateComponent<T> 来保存插件的状态: 1. 创建一个实现 PersistentStateComponent<T> 接口的类,这个类将保存插件的状态。 ```java public class MyPluginState implements PersistentStateComponent<MyPluginState> { private boolean myBooleanState = false; public boolean isMyBooleanState() { return myBooleanState; } public void setMyBooleanState(boolean myBooleanState) { this.myBooleanState = myBooleanState; } @Nullable @Override public MyPluginState getState() { return this; } @Override public void loadState(@NotNull MyPluginState state) { XmlSerializerUtil.copyBean(state, this); } } ``` 2. 在插件的启动类中创建一个实例变量,用于保存状态,并在启动类的构造函数中初始化这个变量。 ```java public class MyPlugin implements com.intellij.openapi.components.ApplicationComponent { private MyPluginState myPluginState = new MyPluginState(); public MyPlugin() { // initialize plugin state myPluginState.setMyBooleanState(true); } // ... } ``` 3. 在插件的启动方法中,将状态保存到持久化存储中: ```java public class MyPlugin implements com.intellij.openapi.components.ApplicationComponent { // ... @Override public void initComponent() { // save plugin state PersistentStateComponent<MyPluginState> stateComponent = new StateComponent<MyPluginState>(); stateComponent.getState().setMyBooleanState(myPluginState.isMyBooleanState()); } // ... } ``` 4. 在插件的关闭方法中,从持久化存储中恢复状态: ```java public class MyPlugin implements com.intellij.openapi.components.ApplicationComponent { // ... @Override public void disposeComponent() { // load plugin state PersistentStateComponent<MyPluginState> stateComponent = new StateComponent<MyPluginState>(); myPluginState.setMyBooleanState(stateComponent.getState().isMyBooleanState()); } // ... } ``` 这样,我们就实现了一个具有持久化状态的 Intellij IDEA 插件。在插件关闭时,状态将被保存到磁盘中,在下次启动时,状态将被恢复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值