`
dengzhangtao
  • 浏览: 677604 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

脚本内访问其他对象,组件或脚本成员方法总结

 
阅读更多

部分函数尽量不可在update使用,否则极其消耗资源
1.在一个脚本内访问其他对象:
  想得到对象:可以用下述函数得到对象,或者直接定义一个变量让外部手动传入(可以的话尽量如此)。
①通过名字访问对象(消耗资源较多),注意对象名字分为带层次和不带层次。以A为例,"A"为可带父级,"/A"为不可含父级,"C/B/A"为C可带父级,"/C/B/A"为C不可带父级(未验证):GameObject.Find("对象名字");
②通过标签访问对象,在访问数量多个,却单一类别的对象时(如敌人)很有用,但注意事先给对象打上标签:
  GameObject.FindWithTag ("标签名");      //通过标签访问单个对象,返回GameObject或null
③GameObject.FindGameObjectsWithTag("标签名"); //通过标签访问多个对象,返回GameObject[]或null


  得到的对象一般新建GO类对象来接收。如果是对象组,则可以:
  GameObject[] go = GameObject.FindGameObjectsWithTag("标签名");
 
2.在一个脚本内访问其他组件:
  脚本等组件都是类,对应的实例一般是依托于游戏对象的。因此访问特定的组件实例必须先得到其依附的游戏对象,可以通过上述说的函数或者在脚本中定义外部变量两种方式得到某个游戏对象(外部变量传入对象方式时,传入类型设置为GameObject,才好找组件)。得到了对象后,很多组件就可以直接访问,比如Transform。
  //在已经获取游戏对象BB实例情况下,A脚本访问BB对象上的脚本B的成员函数bb与变量bbb
  B b=(B)BB.Getcomponent("B脚本的名字");
  b.bb();或b.bbb;
 
注意!!!为了防错,所有找GO对象,传入G0对象的代码都要做防空报错处理。
 
3.在一个脚本内访问其所附加物体及其子物体上附加的所有MonoBehaviour子类脚本(包括自身在内)的同名函数:
   使用消息广播函数:void BroadcastMessage (methodName : String, parameter : object = null,
options : SendMessageOptions = SendMessageOptions.RequireReceiver) 
   例如:BroadcastMessage("ApplyDamage", 5.0F);
         //收到消息的0参数ApplyDamage函数会自动忽略参数5.0F
         //SendMessageOptions.RequireReceiver方式会在没有任何组件接收消息时打印出错误
 
4.在一个脚本内访问其所附加物体的子物体信息:(层次关系控制)
    GO的层次关系通过Transform组件的层次关系来体现,访问GO的子物体也常通过Transform组件来完成。
①this.transform.childCount //得到GO的Transform组件的子Transform的个数,也即子物体个数。
②transform.GetChild(从0开始的index); //得到该GO的第index+1个子物体的Transform组件。
③依据②中得到的子物体Transform组件可以进一步获取子物体游戏对象的信息:
transform.GetChild(index).gameObject;        //得到子物体GameObject类
transform.GetChild(index).gameObject.name;   //得到子物体名字
transform.GetChild(i).gameObject.SetActiveRecursively(true);//控制子物体是否显示达到切换武器等功能
   碰撞后常要用Destroy(this.gameObject)消除火箭弹等,但这个函数会消除目标物体及其所有子物体,我们能需要保持烟尾等子物体效果不消除时,可以先用this.transform.DetachChildren();解除所有子物体与目标物体的父子关系(也是通过Transform组件控制父子关系)。
   某些情况下需要解除特定子物体父子关系,可以通过访问子物体的this.transform.parent=null来实现(先用GetChild(i)遍历子物体,由名字得到目标子物体)。

1
3
分享到:
评论

相关推荐

    Unity3D内部!编程入门脚本编程入门.pdf

    本文档提供了 Unity3D 脚本编程的基本概念和使用方法,包括脚本对象、Update 函数、FixedUpdate 函数、事件句柄、Transform 和 Rigidbody、时间和 delta 时间、访问其他组件和脚本、游戏物体操作等。掌握这些概念和...

    Unity3d脚本大全

    例如,你可以通过public属性暴露变量供其他脚本访问,或者定义公共方法来调用。 5. **碰撞与触发器**:Unity提供Collider和Trigger组件用于处理物体间的碰撞和接近事件。比如,OnCollisionEnter、OnCollisionStay和...

    Unity3D中文脚本

    访问其他组件是Unity脚本中另一个重要的知识点。Unity允许通过组件对象访问游戏物体上的不同组件,比如Transform组件控制位置、旋转和缩放;Rigidbody组件用于处理物理效果。使用GetComponent()方法可以获取游戏物体...

    Unity3D中文脚本使用手册

    Unity3D中文脚本使用手册详细介绍了Unity3D游戏引擎中脚本的使用方法,主要面向新手学习者,旨在帮助他们理解如何通过脚本操控游戏物体,处理时间跟踪,以及访问游戏内的各种组件和物体。 首先,手册简要介绍了...

    untiy3d关于脚本的800个教程

    在更高级的主题中,你可能会接触到Unity的脚本组件通信,如SerializeField让非公共成员在Inspector中可见,以及Serialization机制。此外,还有Unity的内置服务,如云构建、分析和玩家统计,以及如何利用Unity的API与...

    中文Unity3D脚本参考.doc

    对于最常见的组件,可以直接通过脚本中的成员变量访问。例如: ```javascript var transform: Transform; var rigidbody: Rigidbody; function Start() { transform.Translate(0, 0, 1); // 直接使用Transform } ...

    Unity3d 脚本参考

    若想访问更复杂的组件或同一游戏物体上的其他脚本,可以使用`GetComponent()`方法。这种方法允许脚本动态查找并调用同一游戏物体上的其他组件或脚本中的方法。 示例代码: ```csharp // 假设存在一个名为...

    Unity3D脚本:脚本调用1

    总的来说,Unity3D中的脚本调用涉及到对脚本的公共属性和方法的访问,这通常需要理解静态和非静态成员的区别,以及如何通过`GameObject.GetComponent`方法获取脚本实例。在实际开发中,了解并熟练掌握这些调用方式,...

    Unity_脚本参考(中文版)

    - **查找和访问其他游戏对象**:Unity提供了多种方法来查找和访问场景中的其他对象及其组件。 - 例如,通过名字或其他属性搜索游戏对象,并获取其组件。 以上是Unity脚本参考的关键知识点概述。通过这些知识点的...

    Unity3D脚本中文教程 基础教程

    可以通过GetComponent方法来获取任何附加到游戏对象上的脚本或组件,如GetComponent(Transform).Translate(0, 1, 0);。大小写敏感对于区分变量和类/脚本名称非常重要,Transform和transform代表不同的含义。使用...

    中文Unity脚本

    这些组件可以直接通过脚本中的成员变量访问: - **`transform`**:代表游戏物体的位置、旋转和缩放。 - **`rigidbody`**:代表刚体组件,用于物理模拟。 - **`renderer`**:代表渲染器组件,用于渲染游戏物体。 - *...

    Unity3d 中文脚本使用手册

    访问其他组件和访问其他游戏物体是Unity3D中脚本编程的常见需求。手册对此做了详细讲解,包括如何通过脚本访问和操作游戏中的各种组件,以及如何通过脚本访问和操作其他的游戏物体。同时,手册还介绍了向量的概念和...

    中文Unity3D脚本参考

    这些方法使得访问附加到同一游戏对象的其他脚本和组件变得非常方便。 总的来说,Unity3D脚本参考文档提供了一套详细的函数和方法,这些函数和方法是实现游戏逻辑、物理行为和组件交互的基础。无论是使用C#还是...

    Electron通过预加载脚本从渲染器访问Node.js测试桌面端源码包

    标题中的“Electron通过预加载脚本从渲染器访问Node.js测试桌面端源码包”表明,这是一个关于使用Electron框架构建桌面应用的项目,其中涉及了如何在Electron的渲染进程中通过预加载脚本安全地访问Node.js的功能。...

    unity3d中文脚本

    在Unity3D中,常用操作通常涉及对游戏对象、场景以及脚本组件的常见处理。这包括了对游戏对象的移动、旋转、缩放等基本变换操作,以及如何利用事件系统对玩家输入进行响应等。 三、跟踪时间 时间管理是游戏中非常...

    unity3d 脚本手册 中文 完整版

    游戏对象是Unity3D中的基本单元,可以包含多个组件,如Transform(变换)组件控制位置、旋转和缩放,而脚本则赋予对象行为。 2. **C#编程基础**:Unity3D主要使用C#语言编写脚本。手册会涵盖C#的基础语法,包括变量...

    unity脚本手册

    在Unity中,脚本是通过附加到游戏物体来工作的,这些自定义脚本对象内包含了各种函数,用于响应不同的事件。以下是最常用的两个函数: 1. **Update()**:此函数在每一帧渲染前被调用,是执行游戏行为代码的主要场所...

    unity3d脚本概览

    每个脚本本质上都是一个组件,可以直接通过成员变量访问这些组件,如`transform`、`rigidbody`等。如果游戏物体没有特定类型的组件,对应的变量会是`null`。如果需要访问未直接暴露的组件,可以使用`GetComponent`...

    unity3d脚本.pdf

    每个游戏对象可以附加多个组件,这些组件可以是脚本、渲染器或物理组件等。可以通过`GetComponent()`方法来获取同一游戏对象上的其他组件。 - **GetComponent()**:获取当前游戏对象上的指定类型组件。 ##### 访问...

Global site tag (gtag.js) - Google Analytics