问题标签 [prefab]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 通过代码 (C#) 在 Unity3D 中应用 Prefab 的实例覆盖
从 v2020.3 开始,Unity 仍然没有为我们提供干净的 API 来通过脚本应用单个预制件的覆盖。
本质上是一个干净的单线,真正反映了“应用预制”的概念,包括异常处理。
这是过时的,因为它使用了已弃用的功能 https://forum.unity.com/threads/apply-changes-to-prefab-keyboard-shortcut.29251/#post-2538088
c# - 如何独立于其他对象移动预制对象
我希望能够点击一个开关并让它滑到另一边。现在那个开关是一个带有我的代码的预制件。当我添加该预制件的副本时,所有这些副本都会移动而不是我单击的单个副本。
}
unity3d - A* (Astar) 寻路不适用于玩家克隆/实例化 Unity
我的玩家在玩游戏时生成。
当我将我的 Player Prefab 放入“目标”时,它不会跟随。但是当我将我的预制件的克隆(实例)(当我开始游戏时在层次结构中产生的)放入“目标”时,它就可以工作了。
我怎样才能让目标自动获取我的播放器预制件的实例?我在想任何关于“找到带有标签的游戏对象”的东西,但我是合法的 ac#noob,我更喜欢使用螺栓。仅用于寻路我需要使用这种方式。
unity3d - 将预制件的脚本作为组件附加到另一个预制件
我有带有脚本 Player 的 Player 预制件
我也有带有脚本 TouchMove 的 GameController 预制件。这是 TouchMove 代码:
所以 TouchMove 将播放器对象作为一个组件,我通过统一检查器附加它。TouchMove 脚本负责玩家移动。这就是为什么它需要播放器对象。
我还有很多场景,每个场景都包含 GameController 和 Player 对象。当我修改 GameController 或 Player 组件时,我希望更新所有场景中的所有游戏对象。这就是我决定创建预制件的原因:GameController 预制件和 Player 预制件。
在检查器中,我将 Player 预制件添加到 GameController 预制件中,因为 GameController 的 TouchMove 需要玩家对象。
但是在我运行游戏之后,播放器脚本变得不活跃。我的意思是我无法在游戏中移动玩家。(播放器脚本无法正常工作) 如果我将 Player 附加到 GameController作为游戏对象(不是预制件或没有预制件),这个问题就解决了
所以,我的问题:
- 为什么如果我将播放器脚本与预制件一起附加它会不起作用并且如果我将其作为游戏对象附加(没有预制件)它会起作用
- 是否可以按照我描述的方式链接两个预制件?
c# - Unity - 将场景中的按钮分配给预制件
实例化后,我无法将两个按钮分配给预制件。按钮在场景中,我不知道如何分配它们。拖放当然不起作用。我对此很清楚。当我做类似的东西时
在 Prefabs 脚本的 Start() 函数中它也不起作用。
还有其他解决方法吗?
c# - 通过代码更改材料属性不显示
我正在使用 Unity 2020.3.3f1 (HDRP) 我有一个预制件(立方体),上面有发光材料。按下鼠标按钮后,我希望它的发射强度增加 10。
我遇到的问题:Inspector 向我显示强度实际上正在发生变化,但游戏并不代表这些变化(这意味着它没有变得“更亮”,即使材质属性表明它确实如此)。
现在,当我通过 Inspector 手动增加数量时,甚至增加了 0.1,突然之间,这些变化现在是可见的。
我想我现在尝试了一切都没有运气......
简而言之,代码的外观:
unity3d - 进口模型和它的预制件是耦合的吗?
我将模型从 Blender 导入 Unity,然后用它们制作预制件。但是不能在不影响预制件的情况下删除原始导入的模型。
这是一步一步的描述:
- 我在 Blender 中创建了一个简单的模型。只是网格,没有纹理、灯光和其他东西。
- 将其导出为 (Collada .dae) - 这并不重要,确切的格式。
- 将其导入 Unity 的项目窗口(从文件资源管理器拖放)。
- 将其拖入场景中。
- 将其从场景拖到项目窗口 - 通过“创建原始预制件”选项创建预制件。现在我有一个 Unity 预制件和原始导入文件 - 例如两个“Body”对象:
第一个“主体”是 .dae 文件,第二个是由它构建的 Unity 预制件。
据我了解,此时这两个对象是紧密耦合的。我不能删除 .dae 文件,因为 Unity prefab 中的所有模型也会被删除,所以我变成了一个空对象。
和平常一样吗?我是否在项目中保留重复项以仅使用 Unity 的预制件,而不是原始 .dae 文件?或者有没有办法将它们解耦?
这种情况的另一个例子。他还从导入的模型创建了预制件,但最后他的项目中有两个相同的对象:Unity 预制件和原始导入模型。
c# - 如何在 Unity 2D 中禁用预制件?
我正在开发一款 2d 本地多人平台游戏。游戏中有障碍物(尖刺),当玩家与它们发生碰撞时,玩家将死亡。我希望游戏玩家通过按键来决定是否要启用或禁用尖刺(链接指向有助于理解我的问题的图像)。我已经为此编写了一个脚本并将其添加到我的 dontdestroyOnLoad GameManager 中。所以我建造的所有尖峰都是相同的预制件。我的想法是禁用 Project 文件夹中的主 Prefab 以禁用每个场景中的所有尖峰,直到您按下一个键再次重新激活它们。问题是,只有项目面板中的纹理本身被禁用,而不是层次结构中的尖峰预制件,因为预制件变成了常规的游戏对象。我怎样才能解决这个问题?
我的脚本:
c# - 如何从预制资产自身的代码中获取对预制资产的引用?
因此,假设我有这个预制资产“P”,并附有此代码。
请注意:“参考查找”过程由 ContextMenu 触发,因此它是在 Edit Mode而非 Play Mode 下完成的;所有这些都发生在预制资产“P”本身中,而不是放置在场景中的随机实例。
所以我尝试了
但它没有工作,所以试图通过路径加载它:
但它只返回空白字符串。
有什么帮助吗?