Unity引擎,GetComponents 不能查找Hierarchy的全部组件,求告知错误原因?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity引擎,GetComponents 不能查找Hierarchy的全部组件,求告知错误原因?相关的知识,希望对你有一定的参考价值。
如图,GetComponents 只能查找到Test控件自身的physiccontorl 脚本,长度也显示只有一个,可是黄色框里面的控件都是有这个脚本的尝试GetComponentsInChild等指令查找都没问题,就这个不知道为什么不行,求高手告知原因,程序写错,还是系统问题?
GetComponents是获取自身所有组件用的你这里其他物体上的组件自然是找不到
你可以使他们共用一个父节点,然后通过GetComponentsInChildren来获取追问
获取的是一个gameObject 里的所有组件吗,而不是Hierarchy里的所有同一个素材生成的插件,可是一个gameObject 里面也没其他同名的插件啊,那它有什么意义啊,感觉跟GetComponent没啥区别啊
追答除非特别规定,一个游戏对象是可以有多个相同组件的,你可以自己创建一个组件类试一试。
另外这还涉及到泛型,GetComponents方法可以用Component这个组件父类型的泛型方法来获取到游戏对象上所有继承Component的组件
你可以使他们共用一个父节点,然后通过GetComponentsInChildren来获取
Unity基础学习之Unity引擎学习
Unity引擎基础
1. Unity简介
- 简单介绍:
- Unity提供Manual(引擎说明书)和Scripting API(代码,类和方法可以在这里查)两个文档,开发人员可以阅读这两个文档来了解Unity开发
2. 游戏组成
- 一个游戏由多个场景构成,场景又分为2D界面和3D场景
- 在Unity中,界面和场景都称为场景,场景和场景之间可以相互切换
- 场景中包含很多个游戏对象,游戏对象有:
- 2D图片与文字
- 3D模型(包含动画)与特效
- 游戏对象具有的特性:
- 所有游戏对象都是一样的(游戏对象就是一个外壳)
- 游戏对象上挂载的组件不同,挂载的组件属性不同,导致游戏对象的功能不同(功能由组件完成)
- 游戏对象包含各种组件,下面罗列几种组件:
- 灯光组件(发光)
- 声音组件(背景音乐)
- 视频组件
- 图片组件(显示图片)
- 模型显示组件(渲染组件)
- 特效组件
- 导航组件
- 物理组件
- UI组件
- 脚本组件(自己写的功能)
- 组件就是一个对象,对象中包含各种属性
- 组件名——类名
- 一个类包含成员字段、成员属性、成员方法
- 一个游戏总共分成四个部分,总结如下:
- 一个游戏由多个场景组成,场景有2D场景和3D场景之分
- 一个场景由对个游戏对象组成
- 一个游戏对象由多个组件组成
- 一个组件由多个属性组成
3. Unity面板介绍
- Layout:窗口布局样式
- 带Unity图标的表示场景
3.1 Hierarchy(层级面板)
- 功能:
- 显示当前场景中的所有游戏对象的名字
- 描述游戏对象与游戏对象之间的层级关系(父子级关系)
- 可以拖动游戏对象以形成层级
3.2 Scene(场景面板)
- 功能:
- 显示当前场景中的所有游戏对象的模型/图标
- 提供场景和游戏对象的基本操作
- 在面板右上角存在坐标系,可以调整场景视角
- 场景操作:
- Q键:场景移动
- Alt+鼠标左键:旋转场景视角,围绕场景中心点旋转视角
- 鼠标右键:旋转场景视角,围绕当前观察者(鼠标位置)旋转视角
- 鼠标滚轮:拉近拉远场景
- F键:聚焦对象
- 鼠标右键+WASD:场景漫游
- Shift+Ctrl+F:游戏界面同步场景界面(用在摄像机上)
- 在场景中选择好合适的视角
- 选中摄像机对象
- 同步视角,按下快捷键或者GameObject菜单栏下的Align With View
- 游戏对象操作:
- W键:对象移动
- E键:对象旋转
- R键:对象缩放
- 摄像机具有两个模式:透视模式(Perspective)和正交模式(Orthographic,一般2D会用到)
- 搭建场景的时候,为了模型放置精准,可以按下面的顺序进行操作模型:
- 模型先通过QWER设置好一个大概的位置旋转缩放
- 通过模型在Inspector上的Transform组件里的position、rotation、scale去做微调,最好保持数值是一个整数或保留一位到两位小数
- 放置模型,还可以采用位置贴边方式:
- 调节物体位置时,可以按住V键,让当前模型的某个顶点与另一个模型的某个顶点重合,实现贴边
- 原理:
- 一个物体存在多个顶点,每三个顶点可构成一个三角形,多个三角形形成一个模型
- V键可以让坐标系移动到模型顶点位置
- 两个模型之间顶点和顶点重合,可以产生贴边效果
- 当要创建一个复杂物体时,可以按照下面的步骤来创建:
- 先创建一个空对象,作为父物体,创建好后,先Reset重置空对象Transform组件中的属性
- 再去创建物体需要的源部件,作为子物体
3.3 Game(游戏面板)
- 功能:
- 显示玩家所看到的画面
- 开发中需要重点关注的视角
- 调试和测试都需要看这个面板上的信息
- 通过调整摄像机来调整完整能看到的视角
- 手机游戏/电脑游戏中,玩家所能看到的画面会显示在屏幕(2D)上
- VR(眼镜曲面屏)/AR中,主要是通过光学原理,让玩家产生视角错觉,在屏幕上所能看到的2D画面转变成3D画面
- 在这个面板上,存在一个尺寸调整条,可以放大缩小所看到的画面
- 游戏运行的状态信息(运行时占CPU大小,占多少内存,当前帧速率是多少等)可以在面板的右上角Stats中查看,用于后期的游戏调试
3.4 Inspector(监视器面板)
- 功能:
- 主要用来监视游戏对象
- 重点监视游戏对象上挂载的组件,可以在这个面板添加新组件
- 监视游戏对象的基本信息(对象名字、是否静态、有哪些标签、属于哪一层级、激活状态)
- 监视文件信息(材质文件等)
- 监视工程设置
- 主要用来监视游戏对象
3.5 Project(工程面板)
- 功能:
- 显示当前工程的所有资源文件
- 根目录是Assets
- 一个工程下有5个基础文件夹:
- Assets:放置资源文件
- Library:放置库文件(自动生成)
- ProjectSettings:放置工程设置文件
- Temp:放置临时文件
- Package(UnityPackageManager):Unity包管理器
3.6 Console(控制台面板)
- 功能:(显示控制台信息)
- 显示日志信息
- 显示警告信息
- 显示报错信息
4. 地形系统(Terrain)
- Unity提供的一个地形组件
- 一个游戏场景空间,采用地形+模型的方式搭建
- 创建地形系统:
- GameObject——>3DObject——>Terrain
- 创建完成后,在Hierarchy面板中出现相应游戏对象,Project面板中出现地形系统文件(存储地形信息)
- 初始坐标中心位于左下角(x轴表左右,y轴表上下,z轴表前后)
- 编辑地形
- 抬高/降低地形平面(可选择不同笔刷形成不同地形样式)
- Brush Size:笔刷大小
- Opacity:笔刷硬度,值大小表示抬高/降低地形速度
- 平滑地形
- 凹陷地形(可制作平台)
- 在Unity2020版本中,选择设置高度后,Space处要选择Local才可以在一定高度地形上设置平台
- 在Unity2020版本中,选择设置高度后,Space处要选择Local才可以在一定高度地形上设置平台
- 整体设置中可以调整地形大小、高度等
- 高度限制抬高地形最高点
- 按住shift键,做相反操作
- 搭建地形时,要注意,第一个物体的坐标尤为关键,关系到地形上放置模型的坐标值计算是否方便
- 能放在原点,尽量放在原点位置
- 不能放在原点,尽量保持坐标是一个整数,或保留一位小数
- 抬高/降低地形平面(可选择不同笔刷形成不同地形样式)
5. 一些3D模型中会用到的基础理论
5.1 物体中心的概念
- Pivot(模型设计师设计的)
- 单个物体:显示物体出产中心
- 多个物体:显示当前这个物体的中心
- Center(对象边界框的中心点)
- Unity物理计算中心
- 通过快捷键Z切换两个中心点
- 物体中心点的选择不同会影响到旋转效果不同
5.2 坐标系(笛卡尔坐标系)的概念
- 2D笛卡尔(XY轴可以定一个平面上物体位置)
- 3D笛卡尔
- 左手坐标系——计算机、Unity中使用
- 掌心向外, 大拇指与食指成90度
- X轴向右,Y轴向上,Z轴向前
- 右手坐标系——一般在数学中使用
- 掌心向内, 大拇指与食指成90度
- Z轴与左手坐标系相反,指向“自己”
- 左手坐标系——计算机、Unity中使用
- Unity坐标系
- 世界坐标方位
- 世界的东南西北
- 永远不会改变
- 本地坐标方位
- 物体的前后左右
- 会随时发生改变,例如,旋转物体时,物体的本地坐标也会跟着旋转
- 用快捷键X切换两个坐标,即切换方位(世界方位/自身方位)
- 世界坐标方位
5.3 向量和标量的概念
- 标量:有大小无方向
- 向量:有大小有方向(Unity中常用)
- 计算两点之间形成的向量:终点坐标-起点坐标
- 向量加法:首尾相连,一个向量起点指向另一个向量终点
- 向量减法:起点相连,减数终点指向被减数终点(被减数-减数=差)
- 向量点积:
- 结果是一个标量
- 根据点乘结果来判断两个游戏对象之间的方位关系
- 通常用于判断敌人在前还是在后
- 结果是一个标量
- 向量叉乘 :(利用UnityAPI中的Cross函数即可得到计算结果)
- 结果是一个向量(法向量,垂直于两个向量平面),左手坐标系计算
- 法向量指向上方,表示b向量指向a向量右边;指向下方,则相反
- 通常用于判断敌人在左还是在右
- 结果是一个向量(法向量,垂直于两个向量平面),左手坐标系计算
- 计算两点之间形成的向量:终点坐标-起点坐标
5.4 旋转的概念
- 欧拉角(EularAngle):——结构体
- 物体绕XYZ轴(世界的)旋转的角度
- 优点:好理解,好操作
- 缺点:容易出现多个欧拉角的值表示一个旋转
- 四元数:(用得较多,较精准)——类
- 由XYZW四个值组成,由一堆算法算出来
- 优点:避免万向锁(同一个旋转角度,欧拉角描述会有不同的值出现)问题
- 缺点:不好理解,不好操作
5.5 网格的概念(模型形状)
- 用一堆三角形组成
- 模型分为粗模(低模)和细模(高模)两种
- 模型纹理:网格贴图(将2D贴图上的像素点对应到3D模型中粘贴)
- 会用到组件有Mesh Filter(网格选择器)和Mesh Renderer(网格渲染器)
5.6 材质的概念
- 用于渲染网格的文件
- 用Shader(着色器)来编程实现(渲染方案)
- 控制材质球如何渲染的脚本
- 使用CG语言
- 可以编辑特效等
- 需要物理中的光学知识和线性代数中的矩阵知识
- 帧速率(FPS)的概念
- 每秒刷新多少次数
- 作用:
- FPS越高,播放越流畅,性能消耗越大
- FPS越低,播放越不流畅,性能消耗越小
- 人眼分别的帧数是每秒24帧
- 通过Game面板中的Stats来了解游戏的帧速率
以上是关于Unity引擎,GetComponents 不能查找Hierarchy的全部组件,求告知错误原因?的主要内容,如果未能解决你的问题,请参考以下文章