在Unity 5中,管理动态创建的游戏对象的"干净"方式是什么?
我写了一个MonoBehavior创建/销毁几个的组件()GameObjects.对象作为自定义自定义系统的一部分加载,选择部分字符 - 头发/衣服等.这意味着它们对于播放器是可见的,在编辑器中可见,但不应该在编辑器中可编辑.正在加载的对象是带有骨架的网格.
脚本以这种方式运行:
删除:
protected void unloadLastResource(){
if (lastResourceInstance){
if (Application.isEditor){
GameObject.DestroyImmediate(lastResourceInstance);
}
else
GameObject.Destroy(lastResourceInstance);
Resources.UnloadUnusedAssets();
lastResourceInstance = null;
}
}
Run Code Online (Sandbox Code Playgroud)
创建:
GameObject target = getEffectiveTargetNode();
Object resource = Resources.Load(newResourceName);
instance = Instantiate(resource) as GameObject;
instance.hideFlags = HideFlags.HideAndDontSave;
instance.transform.parent = target.transform;
instance.transform.localPosition = Vector3.zero;
instance.transform.localRotation = Quaternion.identity;
instance.transform.localScale = Vector3.one;
Run Code Online (Sandbox Code Playgroud)
销毁处理程序:
void OnDestroy(){
unloadLastResource();
}
Run Code Online (Sandbox Code Playgroud)
这似乎在编辑器中工作正常,但是当我从游戏模式切换回edito模式时,我收到很多警告:
Destroying object multiple times. Don't use DestroyImmediate on the same object in OnDisable or …Run Code Online (Sandbox Code Playgroud) 我希望用户在Unity WebGL游戏中从计算机中选择一个图像,但我无法获得任何库或代码.我想要UnityWebGL(Runtime)的EditorUtility.OpenFilePanel的确切功能.
string path = EditorUtility.OpenFilePanel("用png覆盖","","png");
有没有办法在Unity WebGL构建中获得这个打开的对话框?或者我有什么方法可以在java脚本中做到这一点?就像我从用户的java脚本中获取图像并将其传递给我的C#代码.
这是如何使贝塞尔曲线的单个锚点连续或不连续的后续问题。请参考已接受答案中的相关代码(请注意,因为相关代码很长,我这样做是为了使这个问题保持清晰)。
我正在努力实现以下目标:
使bezier曲线手柄/控制点以如下方式可选:选中后,在检查器窗口中显示单个手柄的属性(例如,连续性)。请注意,我希望在不为手柄/控制点创建游戏对象的情况下完成此操作
保留用于处理每个点的移动的单个方法,而不要为每个点的移动使用单独的方法。
我正在与C#进行二维统一游戏.现在,我正在尝试使相机旋转,我正在使用此代码:
rotateX = Random.Range (0, 50);
Camera.main.transform.eulerAngles = Vector3(0,0,rotateX);
Run Code Online (Sandbox Code Playgroud)
但每次我尝试运行游戏时,它都会给我一个错误.任何人都有关于如何(平滑地)从一侧到另一侧旋转相机的提示?
在 Unity3d 中,在 Mac 上,如何将生成的浮动窗口(例如光照贴图)添加到现有选项卡集(例如:Inspector)?
我还没有找到一种方法来做到这一点...当我单击检查器右上角的添加选项卡控件时,没有用于光照贴图的选项。一定有一个命令,我试过使用 alt、cmd、ctrl 等,但无济于事..
谢谢 !
configuration user-interface unity-game-engine unity3d-editor
我正在尝试在 Unity 编辑器中创建一个易于使用的按钮,用于创建角色和物品。
我将在这里提供一些额外的信息来帮助解释我的问题。我的游戏结构是这样的;游戏控制器 >> 角色脚本 >> (玩家名称)脚本 角色对象上既有角色脚本,也有以其名称命名的脚本。
我希望能够在 Unity 编辑器中单击“创建新角色”,它会执行以下操作;1) 提示输入要使用的名称。2) 根据用户输入的内容创建名为 Name 的空游戏对象。 3) 创建一个同名的新 C# 脚本,并将其添加到该对象中。-我希望生成的脚本中有一些预先确定的“字符模板”代码。4) 将新脚本附加到新的空游戏对象,并附加一个“角色脚本”。
提前致谢。
最后一个子问题。通过角色脚本上的公共单一行为从游戏控制器访问 PlayerNamedScript 会更好吗?
或者,CharacterScript 可以动态扩展同级的 PlayerNamedScript。
我希望这是清楚的。再次感谢。
我无法弄清楚如何在我的自定义检查器中显示纹理字段,文档解释了如何做到这一点.
我有一个脚本,在我的主脚本中有一个带有纹理类型的Icon字段,但需要将其写入自定义检查器.请解释我如何做到这一点.我的主脚本存储为ItemReference,以便我可以访问它的变量.
我已经离开了下面的内容,所以你可以看到我在重写检查员的位置.
using UnityEngine;
using System.Collections;
using UnityEditor;
[CustomEditor(typeof(Item))]
public class ItemCustomEditor : Editor {
//IMPORTANT!! TWEAKING THIS SCRIPT WITHOUT KNOWLEDGE OF THE UNITY EDITOR API MAY BREAK FUNCTIONS OF OTHER SCRIPTS IN GAME SUCH AS MAKING ALL VARIABLES INVISIBLE.
public override void OnInspectorGUI(){
base.OnInspectorGUI();
Item ItemReference = (Item)target;
EditorGUILayout.Separator();
EditorGUILayout.Separator();
ItemReference.ID = EditorGUILayout.IntField("Item ID", ItemReference.ID);
}
}
Run Code Online (Sandbox Code Playgroud)
这是编辑器脚本,这是编辑器脚本引用的普通脚本.
using UnityEngine;
using System.Collections;
public class Item : MonoBehaviour {
//First we declare variables that the database will use
public …Run Code Online (Sandbox Code Playgroud) 我正在Unity 2017.2 中开发一个小型ARPG。
我尝试为我的游戏的 SkillBluePrint 类实现自定义编辑器。
基本上,AbilityBluePrint 包含在运行时生成能力所需的所有信息。包括一个 Effect[] ScritpableObjects 数组,当使用该能力时会触发该数组。
我目前已经拥有了需要实施和工作的一切,但我认为创建能力会非常乏味,原因如下。
假设我有一个效果类 DamagePlusX : Effect 作为伤害修正值。如果我希望此效果对两种不同的能力具有不同的修饰符值,那么我必须在资源目录中创建它的两个实例,并手动将每个实例分配给相应能力的 Effect[] 数组。我担心我最终会得到很多很多效果实例,每个效果实例本质上都有一些不同的整数和浮点数。
因此,我想我会使用一个自定义检查器,有点像Unity 的冒险教程中的检查器。
这个想法基本上是创建AbilityBluePrint的实例,然后使用自定义检查器能够动态实例化Effects[]数组中的效果,并能够直接在AbilityBluePrint检查器中编辑每个效果的属性。
基本上我想要得到一些类似的东西(为可怜的Photoshop道歉):
我尝试转换教程中的脚本以满足我的需要,但从昨天开始我一直遇到同样的错误:
NullReferenceException: Object reference not set to an instance of an object
AbilityBluePrintEditor.SubEditorSetup (.EffectEditor editor) (at Assets/Scripts/Editor/AbilityBluePrintEditor.cs:90)
EditorWithSubEditors`2[TEditor,TTarget].CheckAndCreateSubEditors (.TTarget[] subEditorTargets) (at Assets/Scripts/Editor/EditorWithSubEditors.cs:33)
Run Code Online (Sandbox Code Playgroud)
我尝试了很多事情,我想知道我想做的事情是否可以使用可编写脚本的对象来实现。在原始教程中,相当于我的 BluePrintAbility 的是 Monobehaviour。
我的代码如下:
我的 BluePrintAbility 课程:
[CreateAssetMenu(fileName = "New Ability BluePrint", menuName = "Ability BluePrint")]
public class AbilityBluePrint : ScriptableObject {
public Effect[] effects = new Effect[0];
public string description;
} …Run Code Online (Sandbox Code Playgroud) 我想从自定义编辑器窗口捕获屏幕截图,我将其用作我正在开发的游戏的关卡编辑器,但我不确定如何执行此操作。
我想要的是捕获 EditorWindow,而不是游戏视图或场景视图。
你能帮助我吗?谢谢!
编辑:我想在按下 GUILayout.Button 时通过代码截取屏幕截图:)
假设您有一个简单的预制件“盒子”,我们会说它只不过是一个标准的米立方体。
1 - 预制框在您的项目面板中
2 - 将其拖到场景中
3 - 显然它现在也出现在 Hierarchy 面板中,并且可能被选中并显示在 Inspector 中
需要明确的是,当您执行此操作时,游戏不是 Play,您只是处于普通编辑器模式。
是否可以制作脚本(“编辑器脚本”?),以便,
当你做上面的“1”和“2”时,(再次这是在编辑器模式下,而不是在游戏中)
当 3 发生时,我们可以影响场景中的新 Box 项目
所以,简单的例子:我们将始终将 Z 位置设置为“2”,无论您将它放在哪里。
简而言之:编辑器代码,以便每次将预制件 P 拖到场景中时,它将位置 z 设置为 2.0。
这在 Unity 中可能吗?我对“编辑器脚本”一无所知。
很明显,这应该是可能的。