Unity3D学习笔记(四) 脚本内访问其他对象,组件或脚本成员方法总结

摘要:
如果它是一个对象组,则可以:GameObject[]go=GameObject。查找带有标签的游戏对象;2.访问脚本中的其他组件:脚本等组件是类,相应的实例通常基于游戏对象。因此,要访问特定的组件实例,必须首先获取它所连接的游戏对象。您可以通过上述函数或通过在脚本中定义外部变量来获取游戏对象。获得对象后,可以直接访问许多组件,例如Transform。

(2012-07-08 13:40:50)

部分函数尽量不可在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)遍历子物体,由名字得到目标子物体)。

免责声明:文章转载自《Unity3D学习笔记(四) 脚本内访问其他对象,组件或脚本成员方法总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇QT中文乱码与国际化支持如何给iOS安装包IPA添加时间锁功能?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

unity重写软键盘for Android NGUI

一 原因 以为某些原因,需要重写Unity游戏中Android的软键盘的样式,然而unity对android和ios的ios的软键盘都有封装,在Unity中TouchScreenKeyboard.Open可以打开一个软键盘,然而对这个软键盘的操作函数少的可怜,所以有了这篇文章. 二 目的 本文的主要目的是重写NGUI的UIInput,也就是TouchScr...

(转)Unity内建图标列表

用法 Gizmos.DrawIcon(transform.position, "PointLight Gizmo"); UnityEditor.EditorGUIUtility.FindTexture("PointLight Gizmo"); Unity Editor Built-in Icons Icons what can load usingE...

Unity3D中抖屏(抖动相机)效果的简单实现

这里是一个简单的摄像机抖动方法,记录下来便于查阅。 public class CameraShake : MonoBehaviour { // 抖动目标的transform(若未添加引用,怎默认为当前物体的transform) public Transform camTransform; //持续抖动的时长 public...

Unity 之 如何删除Unity项目里面没用的东西??

选中需要用到的Scene,右键选 Select Dependencies,这样会选出这个场景所有用到的文件,将这些文件导出为 .unitypackage。 用同样的办法就所有用到的几个场景的文件分别导出包。在项目中删除除场景文件之外的所有其它文件,再将原先导出的包导入即可。 这样,项目中的文件都是场景中用到的文件了。  在这些操作前,都先备份好数据,以防误...

Unity 读取Excel

游戏有大多数配置文件,比如玩家等级,游戏商店信息等等.通常情况下把这些放入excel中来读取 第一种解决方案:  xlsx –> csv –> 改变成UTF-8 或者Unicode编码 –> 修改后缀名成.txt  -> 通过Resources.Load读取转换成TextAsset –> 通过,方式开区分开来 转换成csv(...

unity3d中dllimport方法的使用,以接入腾讯平台为例!!!

   转载自:http://momowing.diandian.com/post/2012-12-14/40047766982   如果有侵权,请通知我尽快删除! 说到有关dllimport方法可能还有很多人比较陌生,其实我自己也说不太清楚,大概说说什么时候要用它。 事实上功能类似于调用android的第三包,我们想要使用苹果上特定的api或者第三方平台的...