Unity引擎,GetComponents 不能查找Hierarchy的全部组件,求告知错误原因?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity引擎,GetComponents 不能查找Hierarchy的全部组件,求告知错误原因?相关的知识,希望对你有一定的参考价值。

如图,GetComponents 只能查找到Test控件自身的physiccontorl 脚本,长度也显示只有一个,可是黄色框里面的控件都是有这个脚本的尝试GetComponentsInChild等指令查找都没问题,就这个不知道为什么不行,求高手告知原因,程序写错,还是系统问题?

GetComponents是获取自身所有组件用的
你这里其他物体上的组件自然是找不到
你可以使他们共用一个父节点,然后通过GetComponentsInChildren来获取追问

获取的是一个gameObject 里的所有组件吗,而不是Hierarchy里的所有同一个素材生成的插件,可是一个gameObject 里面也没其他同名的插件啊,那它有什么意义啊,感觉跟GetComponent没啥区别啊

追答

除非特别规定,一个游戏对象是可以有多个相同组件的,你可以自己创建一个组件类试一试。
另外这还涉及到泛型,GetComponents方法可以用Component这个组件父类型的泛型方法来获取到游戏对象上所有继承Component的组件

参考技术A 这里其他物体上的组件自然是找不到
你可以使他们共用一个父节点,然后通过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才可以在一定高度地形上设置平台
    • 整体设置中可以调整地形大小、高度等
      • 高度限制抬高地形最高点
    • 按住shift键,做相反操作
    • 搭建地形时,要注意,第一个物体的坐标尤为关键,关系到地形上放置模型的坐标值计算是否方便
      • 能放在原点,尽量放在原点位置
      • 不能放在原点,尽量保持坐标是一个整数,或保留一位小数

5. 一些3D模型中会用到的基础理论

5.1 物体中心的概念

  • Pivot(模型设计师设计的)
    • 单个物体:显示物体出产中心
    • 多个物体:显示当前这个物体的中心
  • Center(对象边界框的中心点)
    • Unity物理计算中心
  • 通过快捷键Z切换两个中心点
  • 物体中心点的选择不同会影响到旋转效果不同

5.2 坐标系(笛卡尔坐标系)的概念

  • 2D笛卡尔(XY轴可以定一个平面上物体位置)
  • 3D笛卡尔
    • 左手坐标系——计算机、Unity中使用
      • 掌心向外, 大拇指与食指成90度
      • X轴向右,Y轴向上,Z轴向前
    • 右手坐标系——一般在数学中使用
      • 掌心向内, 大拇指与食指成90度
      • Z轴与左手坐标系相反,指向“自己”
  • 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的全部组件,求告知错误原因?的主要内容,如果未能解决你的问题,请参考以下文章

小白_Unity引擎_Light光照探针技术

getComponents() 方法返回的组件数组可以更改

小功能⭐️获取Unity游戏物体上,所挂载组件的名称

小功能⭐️获取Unity游戏物体上,所挂载组件的名称

在 JPanel.getComponents() 中循环时如何获取 JButton 属性

unity能不能导入顶点动画?