首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我实例化一个对象并设置变量时,它不能在unity C#中工作

在Unity C#中,当你实例化一个对象并设置变量时,可能会出现以下几种情况导致对象无法工作:

  1. 类型不匹配:确保你设置的变量类型与实例化的对象类型相匹配。如果类型不匹配,会导致编译错误或运行时错误。
  2. 变量未初始化:在实例化对象后,确保为变量分配初始值。如果变量未初始化,它可能会包含默认值或null,导致对象无法按预期工作。
  3. 对象未激活:在Unity中,如果你实例化的对象未激活(即未设置为active),它将不会被渲染或执行任何逻辑。确保将对象设置为active,以便它能够正常工作。
  4. 对象不存在:如果你在实例化对象之前或之后尝试访问对象,可能会导致对象不存在的错误。确保在访问对象之前检查对象是否存在,并在必要时进行实例化。
  5. 代码逻辑错误:检查你的代码逻辑,确保没有其他错误导致对象无法工作。例如,检查是否有其他代码在实例化对象后修改了对象的状态或行为。

总结起来,当你在Unity C#中实例化一个对象并设置变量时,确保类型匹配、变量初始化、对象激活、对象存在以及代码逻辑正确,以确保对象能够正常工作。

请注意,以上答案是基于Unity C#开发环境的情况下给出的,如果你需要更具体的帮助或针对特定问题的解决方案,请提供更多详细信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

2022年Unity 面试题 |五萬字 二佰道| Unity面试题大全,面试题总结【全网最全,收藏一篇足够面试】

冒泡排序(手写代码) 总结 前言 正所谓 金三银四 ,又到了找工作的大好时机了,不知道大家有没有意向找一份更好的工作呢~ 之前写了很多Unity的学习和实例文章,但是面试题部分还没有一个系统的整理。...○ 委托就是一个类,也可以实例,通过委托的构造函数来把方法赋值给委托实例 ○ 触发委托有2种方式: 委托实例.Invoke(参数列表),委托实例(参数列表) ○ 事件可以看作是一个委托类型的变量...C# 没有头文件和 #include 指令:using 指令用于引用其他未完全限定类型名的命名空间中的类型。 C# 的局部变量在初始前不能使用。...readonly:指示⼀个域只能在声明时以及相同类的内 部被赋值。 static:指示⼀个成员属于类型本身,⽽不是属于特定 的对象。即在定义后可不经实例,就可使⽤。...在编辑场景将GameObject设置为Static有何作用? 设置游戏对象为Static将会剔除(或禁用)网格对象当这些部分被静态物体挡住而不可见

22.8K1730

Unity面试题(包含答案)

哪些可能在一个对象周期中反复的发生 Awake –>OnEnable->Start,OnEnable在同一周期可以反复地发生。...,是Unity为了使开发者能方便的开发第一人称视角的游戏而封装的一个组件 十一:简述prefab的用处 在游戏运行时实例,prefab相当于一个模板,对你已经有的素材、脚本、参数做一个默认的配置,以便于以后的修改...ref和out参数的效果一样,都是通过关键字找到定义在主函数里面的变量的内存地址,通过方法体内的语法改变它的大小。不同点就是输出参数必须对参数进行初始。...static:指示一个成员属于类型本身,而不是属于特定的对象。即在定义后可不经实例,就可使用。 virtual:指示一个方法或存取器的实现可以在继承类中被覆盖。...设置游戏对象为Static,这些部分被静态物体挡住而不可见,将会剔除(或禁用)网格对象。因此,在你的场景的所有不会动的物体都应该标记为Static。

3.2K10

Unity基础系列(二)——构建一个视图(可视数学)

我们将简单地使用Unity默认立方体的游戏对象。 在场景添加一个立方体,移除其碰撞组件,因为这个示例不会使用到物理。 我们会使用脚本来创建这个立方体的诸多实例正确定位它们。...在针对预制体的时候,它会实例一个对象添加到当前场景。我们就在Graph组件Awake,去实例。 ? ?...在本教程,我们假设分辨率仅通过检查器面板进行调整,而不是代码或者其他地方。 2.2 变量实例 要实际使用分辨率,我们必须更改实例的立方体数量。...(使用50的分辨率) 2.3 设置父节点 分辨率设置为50之后,大量实例的立方体出现在场景,而场景的视图视窗里也显示了这么多。 ?...(Graph的子节点) 当一个新的父对象设置Unity将尝试将对象保持在它原来的世界位置、旋转和缩放。而我们现在的情况并不需要。可以直接通过向SetParent提供第二个参数false来决定。

2.7K10

unity c#面试_spring面试题及答案

ArrayList 是一个数组,继承实现了List基类,是比较传统使用的程序数组变量 List是调用List,用了C#的泛型特性 4.请简述GC(垃圾回收)产生的原因,描述如何避免?...Prefab在实例的时候用到,主要用于经常会用到的物体做成一个集合方便反复使用,在移动环境,由于Prefab一般体积比较大,常需要实例,拆分成合适大小的AssetBundle,离线下载比较恰当 26...哪些可能在一个对象周期中反复的发生?...,机会没在这上面踩坑过就是了) gameObject.SetActive(true);//运行时可反复设置 而Awake()是在实例化时触发,不可能实例多次 GameObject.Instatiate...可以用于只需要在物体可见才进行的计算。 33.Unity3D如何获知场景需要加载的数据?

1.3K20

Unity基础教程系列——对象管理(二)对象多样(Fabricating Shapes)

GetRandom取代实例一个显式预置。 ? 也重命名一下实例变量,这样我们处理的是一个shape实例,而不是之前的预置引用,这样表述会非常明确。同样,你可以使用重构来快速且一致地重命名变量。...但不巧的是,我们不能在实例Unity对象使用构造函数方法。所以只能使用这样的方法。 调整ShapeFactory.get,它在返回实例之前设置实例的标识符。 ?...使用GetComponent;两次性能并不理想,特别是当我们决定在将来多次改变一个形状的颜色。因此,让我们将引用存储在一个私有字段,并在一个新的Awake方法初始它。 ?...4.6 GPU实例 当我们使用属性块,可以使用GPU实例一个绘图调用组合使用相同材质的形状,即使它们有不同的颜色。然而,这需要一个支持实例颜色的着色器。...这就是这样一个着色器,你可以在Unity GPU实例手册页面上找到它。唯一的区别是我删除了注释添加了#pragma实例选项assumeuniformscaling指令。

1.7K10

u3d 100道面试题(包含答案)

,可以被实例 五:请简述GC(垃圾回收)产生的原因,描述如何避免?...哪些可能在一个对象周期中反复的发生? 答:Awake–>OnEnable->Start OnEnable在同一周期可以反复地发生!...注意:C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象 五十:Unity3D的协程和C#线程之间的区别是什么?...static:指示一个成员属于类型本身,而不是属于特定的对象。即在定义后可不经实例,就可使用。 virtual:指示一个方法或存取器的实现可以在继承类中被覆盖。...答:设置游戏对象为Static将会剔除(或禁用)网格对象当这些部分被静态物体挡住而不可见。因此,在你的场景的所有不会动的物体都应该标记为Static。

65531

Unity基础教程系列(九)——形状行为(Modular Functionality)

这是关于对象管理的系列教程的第九篇。它增加了对形状的模块行为的支持。 本教程使用Unity 2017.4.12f1编写。 ?...1.4 在需要的时候添加行为 在SpawnZone.SpawnShape,将这些行为组件添加到形状设置其属性,而不是形状本身的属性。 ? 在这里可以使用var吗?...现在我们不能在Shape.AddBehavior中使用AddComponent。相反,我们必须通过调用该类型的默认构造函数方法来创建一个常规对象实例。 ?...Unity没有序列堆栈,但在这个例子没影响。 给池一个Get和Reclaim方法。它们的工作方式与ShapeFactory的工作方式相同,但它们要简单得多。...AddBehavior而不是总是创建一个新的对象实例。 ? 最后,要启用行为重用,请在Shape.Recycle回收它们。 ?

1.3K40

Unity 引擎资源管理代码分析 ( 1 )

这些类的属性和方法其实都是由C++代码实现的,只不过暴露给了C#脚本。也就是说在创建这些对象系统会同时在C#的managed heap和C++ native heap中分配内存。...而当我们把其中的一部分子树在Unity编辑器拖拽到资源视图中就会生成一个对应的.prefab文件。...当我们通过Resources.Load之类的接口加载.prefab文件,引擎则会自动创建这些GameObject、Component,加载其所引用的资源,恢复其组织关系。保存则反之。...当访问对象指针,它会通过Object::IDToPointer函数在一个全局对象查找实际的对象指针,返回。...Object基类的虚函数,负责检查在该对象包含的所有可永续的(代码原文Persistent,直白的说就是可通过文件存取。)

8.3K52

Unity性能调优手册2基础:硬件,渲染,数据,Unity如何工作C#基础,算法和计算复杂度

堆栈实际上是一个专用的固定区域,与程序的操作密切相关。当调用函数,将为参数和局部变量分配堆栈,当函数返回到原始函数,将释放堆栈累积返回值。...这个函数使用GPU的能力,在一个单一的绘制调用或设置路径调用绘制具有相同网格的对象。...在Unity,可以使用纹理导入设置为每个平台指定各种压缩方法。因此,通常导入未压缩的图像根据导入设置应用压缩以生成要使用的最终纹理。...当然,这在空间使用方面是浪费的,但它也浪费内存,因为当两种材料加载到内存,纹理是分别实例的。...但是,在引用类型的字段声明的值类型和静态变量是在堆区域中分配的。注意,定义为结构的变量不一定分配给堆栈区域。 处理数组 值类型的数组是内联分配的,数组元素是值类型的实体(实例)。

54631

Unity通用渲染管线(URP)系列(二)——Draw Calls(Shaders and Batches)

C#,这将定义一个字段,但是在这里它被称为uniform 值。它由GPU每次绘制设置,对于该绘制期间所有顶点和片段函数的调用都将保持不变(统一)。 ?...这就是所谓的GPU实例(GPUInstancing),其工作原理是一次对具有相同网格物体的多个对象发出一次绘图调用。CPU收集所有每个对象的变换和材质属性,并将它们放入数组,然后发送给GPU。...这将使Unity生成我们的着色器的两个变体,一个具有GPU实例支持,一个不具有GPU实例支持。材质检查器还出现了一个切换选项,使我们可以选择每种材质要使用的版本。 ?...接下来,添加UNITY_SETUP_INSTANCE_ID(input); 在UnlitPassVertex的开头。这将从输入中提取索引,并将其存储在其他实例宏所依赖的全局静态变量。 ?...颜色的alpha通道,通常表示透明度,但目前修改它不会有任何效果。可以将渲染队列设置为Transparent,但这只是在对象被绘制,提供应该按什么顺序,而不是如何去绘制。 ?

6K51

为虚幻引擎开发者准备的Unity指南

:序列字段 在类主体的顶部,脚本为组件定义了两个字符串变量,以便在其启动和被命中进行记录。...默认情况下,公共变量是序列的,私有变量不是,因此不需要为公共变量使用该属性。即使变量是序列的,你仍然可以对其进行初始,如 hitLimit 变量所示。...这将作为变量在 Inspector 显示的默认值。 6.4 事件方法 下面是 Unity 在响应特定事件将调用的函数: 一旦组件的游戏对象在场景中被激活,就会调用 Start()。...在这两种情况下,都需要传入类引用和初始数据,例如名称和位置。在 Unity ,使用 Instantiate() 函数完成游戏对象实例,该函数接受预制件引用和起始位置/旋转。...如果你只需要一个空游戏对象,也可以使用“new GameObject()”快速实例一个新的游戏对象实例

22310

【《Effective C#》提炼总结】提高UnityC#代码质量的21条准则

原则3 推荐使用is 或as操作符             而不是强制类型转换 ● C#,is和as操作符的用法概括如下: is : 检查一个对象是否兼容于其他指定的类型,返回一个Bool值,永远不会抛出异常...原则5 理解几个等同性判断之间的关系 ● C#可以创建两种类型:值类型和引用类型。如果两个引用类型的变量指向的是同一个对象,它们将被认为是“引用相等”。...这样使得最终的对象可以执行最少的代码来保证初始的正确性。 ● 构造函数初始器允许一个构造函数去调用另一个构造函数。而C# 4.0添加了对默认参数的支持,这个功能也可以用来减少构造函数的重复代码。...这里有一些规则,可以帮你尽量降低GC的工作量: 1)若某个引用类型(值类型无所谓)的局部变量用于被频繁调用的例程,那么应该将其提升为成员变量。 2)为常用的类型实例提供静态对象。...委托对象包含一个方法的应用,该方法可以是静态方法,也可以是实例方法。也就是说,使用委托,我们可以和一个或多个在运行时联系起来的客户对象进行通信。

1.7K30

基础渲染系列(十九)——GPU实例(Instancing)

实例产生的球体放置在它的子层级下,这样编辑器的层次结构窗口就不用显示数千个Instance实例而耗费性能了。 ? 创建一个新场景,使用此组件将测试对象放入其中。将球预制件分配给它。...2 混合材质属性 所有批处理形式的限制之一是它们仅限于具有相同材质的对象当我们希望渲染的对象具有多样性,此限制就会成为阻碍。 2.1 随机颜色 例如,当我们改变球体的颜色。...2.3 Property Buffers 渲染实例对象Unity通过将数组上传到其内存来使转换矩阵可用于GPU。Unity对存储在材料属性块的属性执行相同的操作。...但这要起作用的话,必须在“My Lighting”定义一个适当的缓冲区。 声明实例缓冲区的工作类似于创建诸如插值器之类的结构,但是确切的语法因平台而异。...将_Color变量的定义放在实例缓冲区UNITY_INSTANCING_CBUFFER_START宏需要一个名称参数。实际名称无关紧要。

10.6K30

Unity基础系列(四)——构造分形(递归的实现细节)

在本教程,我们将编写一个小的C#脚本,让它完成一些类似分形的行为。 这里假设你已经能够了解一些Unity的基本操作,并且能够创建基本的C#脚本了。...在inspector 窗口中添加一个公共maxDepth整数变量并将其设置为4。再添加一个私有深度整数。然后,只有当我们在最大深度以下,才创建一个新的子级。 ? ?...当你在Unity创建协程,真正做的其是创建一个迭代器。当你将它传递给StartCooutine方法,它将被存储,被要求每帧都要它的下一个Item,直到它完成为止。...然后,再将CreateChildren简化为一个短循环,使用子索引作为Initialization的参数。 ? 数组如何工作? 数组是长度固定的对象,包含一个线性变量序列。...这是因为Unity的序列系统会为它创建一个空数组,而本例它不会是空数组。 现在,不要将材料引用从父节点传递到子节点,而是只传递材料数组的引用。

1.8K10

Unity Android Plugin开发指南

封装代码可以是C#文件,或者dll文件,都放在/Assets,若是dll,需在Unity C#工程添加此dll依赖。...Get T 获取成员变量 GetStatic T 获取类的成员变量 Set(T) void 设置成员变量 SetStatic(T) void 设置类的成员变量 注意: T的类型只能为原始值类型...,而不是通过getter或setter 下面将通过一段代码来演示:如何获取一个AndroidJavaClass实例,并且调用其getInstance方法获取其对象,然后调用此对象的方法。...AndroidJavaObject对象ajo,然后在InitFromJava方法通过ajo来初始这个对象的成员变量。...以一个SDK类型的工程为例,我们来看一下工程的内容: Android SDK Android Demo (快速调试) Unity Bridge (封装Android SDK) Unity Demo (演示调试

8K80

Unity基础教程系列(新)(二)——构建视图(Visualizing Math)

请注意,当你跳入和退出预制模式,场景工具栏设置将会更改。 预制件是配置游戏对象的便捷方法。如果更改预制资产,则其在任何场景的所有实例都将以相同的方式更改。...(Graph 游戏对象) 1.3 实例预制体 实例游戏对象是通过Object.Instantiate方法完成的。...用它来设置点的位置。 ? ? (立方体向右一个单位) 现在进入播放模式,我们仍然得到一个立方体,只是位置略有不同。让我们实例第二个实例,并将其放在向右的另一个步长上。...将此值存储在变量,并用它来计算立方体的比例及其X坐标。 ? ? (使用50的分辨率) 2.3 设置父节点 进入分辨率为50的播放模式后,场景以及项目窗口中都会显示许多实例的立方体。 ?...(现在他们都是Graph的子节点了) 设置新的父对象后,Unity会尝试将对象保持在其原始世界位置,旋转和比例。在我们的例子,我们不需要这个。

2.6K50

Unity基础教程系列(新)(一)——游戏对象和脚本(Creating+a+Clock)

Unity,X轴指向右,Y轴指向上方,Z轴指向前方。因此,让我们在设计时钟要牢记相同的方向,这意味着当我们沿Z轴查看时钟时会看到其正面。...代码编辑器使用的项目文件应该自动设置以识别它。 访问Unity类型总是必须包含UnityEngine前缀是不方便的。幸运的是,我们可以声明应自动搜索名称空间以完成C#文件的类型名称。...这意味着当Unity保存场景,应该将其包含在场景的数据,这是通过将所有数据按顺序(序列)并将其写入文件来实现的。...在本教程,我们唯一的C#代码是Clock,因此没有理由公开其内容。 字段可序列后,Unity将对其进行检测并将其显示在Clock游戏对象的Clock组件的检查器窗口中。 ?...如果是变量,则可以省略类型声明,而用var关键字替换。这样可以缩短代码,但只有在声明变量可以从分配给变量的类型推断出变量的类型才有可能。

4.2K20

Unity开发入门-环境安装及素材导入

然后点Scipt Editor选中你安装的vscode的exe 常用对象 以下是一些常见Unity对象的作用和常用属性的简要说明: GameObject(游戏对象):游戏中的基本构建块,用于表示场景的实体...以下是一些常用的MonoBehaviour生命周期方法: Awake():当脚本创建实例时调用,用于初始脚本和变量。通常用于获取组件引用或设置初始数值。...Start():在脚本实例创建完成后的第一帧调用,用于进行一次性的初始操作。通常用于设置游戏对象的初始状态。 Update():在每一帧进行更新时调用,用于处理游戏逻辑。...OnDestroy():当脚本实例被销毁时调用,通常在脚本被销毁进行一些资源释放或清理操作。 这些生命周期方法可以让你在适当的时机执行相关的代码逻辑,实现游戏对象的行为和状态的控制。...它会在当前物体以及其所有子物体中进行递归搜索,返回找到的第一个符合条件的组件。

38330

Unity性能调优手册10C#优化:GC,对象池,forforeach,string,LINQ

对象池 正如我们在许多地方所提到的,在游戏开发预先生成对象使用它们而不是动态生成它们是非常重要的。...的值在被创建后不能被改变(不可变),所以一个看起来改变值的操作创建返回一个新的字符串对象。...上一节对象的使用也应该应用在这里,并且可能提前使用的字符串应该是预先生成的字符串对象使用 然而,在游戏过程,有时必须执行字符串操作和创建字符串对象。...LINQ内部实例一个实现Enumerable的类,此外GetEnumerator()实现循环处理等造成了GC.Alloc LINQ延迟求值 LINQ方法(如Where和Select)是延迟计算...由于目前的情况,最好检查由IL2CPP生成的代码,决定每个项目的密封修饰符的设置。 对于更可靠的直接方法调用,以及对未来IL2CPP优化的预期,将密封修饰符设置为可优化标记可能是一个好主意。

1K11
领券