我问我如何调整一个克隆的形状/尺寸以影响场景视图中的所有其他克隆,并且接受的答案是现场.它只能克隆一个游戏对象.我尝试进行一些调整,但我提出的唯一解决方案是为其他对象添加重复方法.在处理要克隆的几个游戏对象时,这不能很好地工作.
如何克隆几个独特的游戏对象,以便调整一个克隆的组件/属性会影响场景视图中该对象的所有其他克隆?
请注意,我不想在运行时实现这一点,我不想使用预制件.我正在使用它来帮助创建复杂的级别,因此正在调整克隆的实时更新非常重要.
另外,我还需要一种方法来关闭每个克隆上的重复属性/组件复制,最好是用一个按钮.
我需要创建复杂的分段贝塞尔曲线,所以我想更新代码以创建illustrator/photoshop类笔工具贝塞尔曲线.此视频显示了pentool的行为方式.
请注意,不是使用前两个锚点创建二次贝塞尔曲线(如视频中所示),我宁愿选择立方体(如链接代码示例中所示).
以下是我已经实现的Illustrator/photoshop笔工具的功能,这些功能是Unity中复制所必需的.
在第一次单击时在同一个鼠标点创建所有锚点/控制点(在第一次单击时创建对象)
当鼠标点从第一次点击移动(未按下)时,控制点将与两个锚点一起落入以创建一条直线(三次曲线)
当单击并拖动鼠标(距离第一次点击任何距离)时,控制点远离直线移动以形成基于拖动方向的曲线,当拖动距离增加时,它们的长度也会增加单击.
在创建曲线期间重新选择第一个锚点时,应关闭路径
我也不确定如何解决上述问题,但这是我到目前为止编写的代码:
BPath:
[System.Serializable]
public class BPath
{
[SerializeField, HideInInspector]
List<Vector2> points;
[SerializeField, HideInInspector]
public bool isContinuous;
public BPath(Vector2 centre)
{
points = new List<Vector2>
{
centre+Vector2.left,
centre+Vector2.left,
centre+Vector2.left,
centre+Vector2.left
};
}
public Vector2 this[int i]
{
get
{
return points[i];
}
}
public int NumPoints
{
get
{
return points.Count;
}
}
public int NumSegments
{
get
{
return (points.Count - 4) / 3 + 1;
}
}
public void AddSegment(Vector2 …Run Code Online (Sandbox Code Playgroud) Firebase 身份验证允许您使用来自其他登录提供商(Facebook、Twitter 等)的身份验证令牌进行身份验证。我的应用程序打算在 iOS 和 Android 上发布。我认为通过 Google 和 Apple 进行身份验证将使我能够覆盖所有潜在用户的 99%。到目前为止,我发现在 Unity 中使用 Google 对用户进行身份验证是一种可怕的体验。
https://firebase.google.com/docs/auth/unity/google-signin 有关 Google 身份验证的 Firebase 指南仅提供了有关如何将 Google 身份验证令牌交换为 Firebase 身份验证令牌的指南。与其他 Firebase 身份验证提供程序的页面不同,它甚至没有首先提示您如何获取 Google 身份验证令牌,甚至没有提到可能的插件。
https://github.com/googlesamples/google-signin-unity 网上有一个项目,可以让用户使用 Unity 项目登录 Google。但是,只有在项目已构建并在 iOS 或 Android 上运行时才可以登录,而在编辑器中则无法登录。特别是对于 iOS,这会让开发变得很累。一位乐于助人的用户发布了一个解决方法,以便它可以在编辑器中运行,但此解决方案似乎已过时。如果 Google 认真地支持 Google 登录,它早就会添加此功能。事实上,该项目已经一年多没有更新了。
https://github.com/playgameservices/play-games-plugin-for-unity Google 似乎正在积极为 Unity 开发 Google Play Games api。但是,它不再支持 iOS。此外,我的应用程序不是游戏,这可能会引起一些混乱。我希望用户能够使用任何 Google 帐户登录我的应用,而不仅仅是当前的 Play 游戏帐户。
我不知道该怎么做。我的搜索结果越来越少。Google 似乎不希望开发人员能够实施登录解决方案。与此同时,Apple 正在强行将他们的新登录解决方案作为应用商店批准的条件。我不知道该怎么办。有人可以帮忙吗?
我知道这个问题可能被问了很多次,但是通常回答是错误的。
对检查器(例如,图2和图3)和ProjectView(例如,图1)中的特定组件/脚本使用自定义图标

对于每个应该带有图标的组件/类,我在文件夹中都有一个accroding Icon文件
Assets/Gizmos/<Path>/<To>/<Namespace>/<ClassName> icon
Run Code Online (Sandbox Code Playgroud)
并Import Settigns设置TextureType为Editor GUI and Legacy GUI
这工作正常..直到现在,我是实现该目标的唯一方法(请记住以下部分,我绝对不想要)。
但是,我想知道是否真的没有更好的方法来让每个脚本具有唯一的Icon文件。这使得项目/ UnityPackage不必要地庞大。同样,如果我重命名一个类,我也总是必须重命名相应的图标文件...这意味着感觉不对!
大多数Unity内置行为和组件都有一个唯一的图标。但是来自新PackageManager的外部Packages也具有内置图标,有时还会Gizmos文件夹,但是它没有遵循上述命名规则...因此,显然,为它们配置了图标。
因此,我的问题是:
有没有更好的方法来为脚本/组件提供这些图标?
最好编写脚本并重用一个单一的图标文件,而不是在多个不同名称的文件中具有相同的图标。
和/或还有/在哪里/如何为这些图标定义来自PackageManager的脚本?
对于所有GameObjects附加了这些组件的对象,也要在SceneView中显示图标(例如,图4)。这是由于通过图5中的检查器选择了该脚本的图标(如本文中或此处建议的所有建议,甚至Unity都建议使用Unity-Assign Icons)或使用OnDrawGizmos或DrawGizmo
更新资料
因为这个答案是建议的:我也知道我可以做到这一点,并通过GizmosSceneView 的设置将其关闭。但是想象一下,我喜欢25个不同的模块,每个模块都有不同的图标。我不想在每个项目的基础上逐一禁用SceneView设置中的Gizmos!甚至提供的脚本似乎也很庞大。反思将是我永远不会采取的最后手段。另外,我宁愿根本不让那些图标尽可能地显示为Gizmos,而不是全部禁用它们。
ReorderableList我的CustomEditor脚本中有一个.在drawElementCallback我添加了第二个嵌套ReorderableList.一切正常,我可以像这里一样在两个列表中添加元素
但是你可以看到由于某种原因我不能选择内部元素,ReorderableList所以我也无法删除项目.
如何选择内部列表中的项目?
这里的类分解为基本示例
using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEditorInternal;
using UnityEngine;
[Serializable]
public class SomeClass
{
public string Name;
public List<SomeClass> InnerList;
}
[CreateAssetMenu(menuName = "Example", fileName = "new Example Asset")]
public class Example : ScriptableObject
{
public List<SomeClass> SomeClasses;
[CustomEditor(typeof(Example))]
private class ModuleDrawer : Editor
{
private SerializedProperty SomeClasses;
private ReorderableList list;
private void OnEnable()
{
SomeClasses = serializedObject.FindProperty("SomeClasses");
// setupt the outer list
list = …Run Code Online (Sandbox Code Playgroud) 抱歉我的英语(谷歌翻译)。以下是在选定目录 (Assets/Resources/TestObject.asset) 中创建资产 (ScriptableObject) 的代码片段:
\n\n[MenuItem("Assets/Create/Test Object")]\nprivate static void CreateTestObject()\n{\n var testObject = ScriptableObject.CreateInstance<TestObject>();\n AssetDatabase.CreateAsset(testObject, "Assets/Resources/TestObject.asset");\n AssetDatabase.SaveAssets();\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如何获取我所在目录的路径?为了不手动对\xc2\xb4t 路径进行硬编码,而是将此 GameObject 保存在我调用该方法的同一文件夹中。
\n\n例如:
\n\n1)我从Assets/TestFolder/TestFolder2调用该方法。
\n\n2)并在同一目录中创建一个资产(TestObject)。并且不会在Assets/Resources中创建。
\n\n综上所述,我需要通过菜单获取调用该方法的目录的路径(Assets/Create/Test Object)获取调用该方法的目录的路径。
\n\n另外:我可以在创建游戏对象后立即重命名它吗?与其他对象(脚本、文件夹等)一样。
\n\n预先感谢您的回答!
\n\n示例(屏幕截图): \n如何获取以红色突出显示的路径。我将通过菜单(创建/测试对象)调用该方法。在我选择的目录中(Assets/TestFolder/TestFolder2)。资产是在那里创建的。而不是在资产/资源中。我需要一个将字符串返回给我的方法:Assets/TestFolder/TestFolder2。
\n我想通过调整一个来改变/调整场景视图中几个克隆对象的形状/尺寸.这个对象可以说是需要扩展的四元组或线条渲染器.例如,在场景视图中扩展(使用鼠标)一个游戏对象线渲染器时,所有其他克隆都会受到影响.我知道在克隆它之前调整一个对象的形状/尺寸要简单得多,也可以在预制件上进行此更改并应用于所有对象,但我需要看到动态更改,因为它们恰好使我的设计过程更多有效.我还想在需要时打开和关闭此功能.请看看我是如何在这个问题中创建克隆的 .
请注意,我不想在运行时实现此目的.
我有一个小脚本,它在构建之前在 Resources 文件夹中创建一个文本文件,需要将其包含在构建中。所以我使用 Unity 的IPreprocessBuildWithReport编写了这个脚本:
using UnityEngine;
using UnityEditor;
using UnityEditor.Build;
using System.IO;
class MyCustomBuildProcessor : IPreprocessBuildWithReport
{
public int callbackOrder { get { return 0; } }
public void OnPreprocessBuild(UnityEditor.Build.Reporting.BuildReport report)
{
File.WriteAllText(
Application.dataPath + "/Resources/version.txt",
string.Format("{0}", PlayerSettings.Android.bundleVersionCode));
AssetDatabase.Refresh();
}
}
Run Code Online (Sandbox Code Playgroud)
请注意AssetDatabase.Refresh();最后的声明。它确保 Unity 意识到更改并将更新的文件包含在构建中。现在,每当我更改bundleVersionCode并按构建时,Unity 都会按预期更新文件,但构建会失败并出现以下非常常见的错误:
但是,如果我尝试以相同的方式第二次构建,bundleVersionCode则不会发生任何文件更改并且构建会成功。
所以我想这AssetDatabase.Refresh()并没有真正起作用OnPreprocessBuild(),或者我又做了一些明显愚蠢的事情?谁能建议一个解决方法?
编辑:
请忽略前两个错误,只是当我通过后缀从构建中排除文件时,Unity 不喜欢我~。
我正在 Unity 中创建一个自定义编辑器窗口。当鼠标悬停在标签上时,我想让标签改变颜色。为了实现这一点,这似乎应该有效:
GUI.skin.label.hover.textColor = Color.red;
GUILayout.Label("My Label");
Run Code Online (Sandbox Code Playgroud)
但是当我用鼠标悬停在标签上时,标签仍然正常显示,没有任何影响。
我也尝试过手动创建 GUIStyles 并将它们作为参数传递给 GUILayout.Label,结果相同。normal但是,如果我更改状态,我会看到颜色发生变化。
hover标签是否支持状态,如果不支持,它支持哪些控件以及我如何找到这些信息?Unity 的文档中似乎没有。
Assets 的 Unity 上下文菜单有各种有用的快捷方式,但没有快捷方式可以快速创建自定义编辑器。相反,如果我想创建一个自定义编辑器,我必须经历所有这些烦人的样板步骤:
Editor目录(如果还没有创建),然后转到正确的子目录Create-> C# Script(实际上应该被称为C# Component Script)MonoBehavior东西Editor到类名using UnityEditorCustomEditor属性Editor......在能够真正开始写我的东西之前......
某处有捷径吗?