找回密码
 立即注册
查看: 379|回复: 0

游戏开发学习笔记(二)-《Unity脚本编程》(一)-脚本 ...

[复制链接]
发表于 2021-12-16 15:01 | 显示全部楼层 |阅读模式
前言



这篇笔记整理通过脚本获取物体和物体组件的方法。用这个头顶小狗的刀客塔物体来作示范。
首先我们为物体body挂载一个名为GetGOandComponent的脚本
1.脚本获取组件

1.1三种GetComponent



从字面上看,我们获取的是body、body的父物体以及body的子物体的Transform组件
可实际上的输出是这样的



三个变量获取的全都是body的Transform组件

我们再尝试获取父物体和子物体的Rigidbody2D组件




这次却获取成功了
这是因为物体body和它的父子物体都有Transform组件,而Rigidbody2D组件却是物体body所没有的。GetComponentInChildren和GetComponentInParent会先从挂载脚本的物体本身开始寻找符合要求的组件(不太理解为什么要这么设计)
1.2三种GetComponents



我们给body,body的父物体player、hold以及body的子物体inhand、outhand分别挂载两个Test脚本
重新编辑GetGOandComponent脚本如下


输出结果如下


可以看出,GetComponents获取的是一个符合要求的组件的数组;GetComponentsInParent和GetComponentsInChildren同样会获取挂载脚本的物体本身上符合要求的组件
1.3用GetComponent和GetComponents从组件获取组件




这几种写法获取的都是该物体的Transform组件

GetComponent和GetComponents可以将物体的一个组件看作物体本身,这使得脚本的编写更加灵活(比如myTransform3和myTransform4的写法),也方便我展示自己的病入膏肓(比如myTransform9的写法)
需要注意的是GetComponent和GetComponents并不能把物体组件的数组看作物体本身。
2.脚本获取物体

2.1用脚本获取物体的五种方法





这里的代码使用五种方法用脚本获取物体,分别是直接使用gameobject字段获取(me)、通过组件获取(me2)、通过物体名称获取(meAgain)、通过tag获取(mememe)、通过父子关系获取(andME)。
(其实通过父子关系获取本质也是通过组件获取,但是这种方法比较特殊,要单独拿出来讲)
其中通过物体名称获取的方法非常直观,但是这种方法性能低效、只能找到激活的物体,而且在有多个重名物体时并不方便。相比之下通过tag获取和通过父子关系获取效果会更好。
2.2通过父子关系获取物体

先再次展示一下body的父子物体


重新编辑GetGOandComponent脚本如下





输出结果

Transform.Find需要的字符串参数不是物体名称,而是要获取的物体相对脚本所在物体的路径
“”可以用来指代挂载脚本的物体本身,“..”可以用来指代挂载脚本的物体的父物体,“../..”则是父物体的父物体
也可以通过Transform.parent获取父物体,通过Transform.root获取最上一级的父物体,通过Transform.Getchild()按照子物体的序号获取子物体

<hr/>以上为个人学习笔记,欢迎指错

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-23 01:36 , Processed in 0.064627 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表