选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧
1、 [Unity]介绍可以在游戏画面上显示FPS,内存,音频,设备信息的“Graphy”
https://github.com/Tayx94/graphy
2、 [Unity]编辑器扩展,可以轻松选择重叠的uGUI对象
当有很多UI, 特别是UI重叠的时候, 点选特别麻烦!
在“Scene”视图中单击鼠标右键,
从上下文菜单中选择鼠标光标位置上存在的所有uGUI对象
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;
[InitializeOnLoad]
public static class SceneViewContextMenu
{
private static Vector3[] corners = new Vector3[ 4 ];
static SceneViewContextMenu()
{
SceneView.onSceneGUIDelegate += OnSceneGUI;
}
private static void OnSceneGUI( SceneView sceneView )
{
var e = Event.current;
if ( e == null ) return;
if ( e.type != EventType.MouseUp ) return;
if ( e.button != 1 ) return;
e.Use();
ShowSpriteSelectionMenu( e.mousePosition );
}
private static void ShowSpriteSelectionMenu( Vector2 screenPos )
{
var groups = SceneViewRaycast( screenPos )
.GroupBy( c => c.gameObject.scene.name )
.ToArray()
;
var isOneScene = GetAllScenes().Count( c => c.isLoaded ) <= 1;
var menu = new GenericMenu();
var nameTable = new Dictionary<string, int>();
foreach ( var group in groups )
{
foreach ( var n in group )
{
var name = n.name;
var sceneName = n.gameObject.scene.name;
var nameWithSceneName = sceneName + "/" + name;
var isSameName = nameTable.ContainsKey( nameWithSceneName );
var text = isOneScene ? name : nameWithSceneName;
if ( isSameName )
{
var count = nameTable[ nameWithSceneName ]++;
text += " [" + count.ToString() + "]";
}
var content = new GUIContent( text );
menu.AddItem( content, false, () => OnSelect( n ) );
if ( !isSameName )
{
nameTable.Add( nameWithSceneName, 1 );
}
}
}
menu.ShowAsContext();
}
private static void OnSelect( RectTransform rectTransform )
{
Selection.activeTransform = rectTransform;
EditorGUIUtility.PingObject( rectTransform );
}
private static IEnumerable<RectTransform> SceneViewRaycast( Vector2 mousePos )
{
return GetAllScenes()
.Where( c => c.isLoaded )
.SelectMany( c => c.GetRootGameObjects() )
.Where( c => c.activeInHierarchy )
.SelectMany( c => c.GetComponentsInChildren<RectTransform>() )
.Where( c =>
{
c.GetWorldCorners( corners );
return NGUIEditorTools.SceneViewDistanceToRectangle( corners, mousePos ) == 0;
} )
;
}
private static IEnumerable<Scene> GetAllScenes()
{
for ( int i = 0; i < SceneManager.sceneCount; i++ )
{
yield return SceneManager.GetSceneAt( i );
}
}
}
https://qiita.com/kyubuns/items/f10ae5c0de29d715a23b
3、 通过向Unity项目引入“unity-toolbar-extender”
,您可以在Unity编辑器顶部的播放按钮的两侧放置按钮。
https://github.com/marijnz/unity-toolbar-extender
using ToolbarExtender;
using UnityEditor;
using UnityEngine;
[InitializeOnLoad]
public class LeftButtonToolbarWindow : ExtendedToolbarWindow
{
static LeftButtonToolbarWindow()
{
RegisterToolbarWindow<LeftButtonToolbarWindow>( -90, 35 );
}
protected override void OnGUI()
{
base.OnGUI();
var rect = new Rect( 0, 0, position.width, position.height );
rect.y = 4;
if ( GUI.Button( rect, "1", Styles.commandButtonStyle ) )
{
// ...
}
}
}
[InitializeOnLoad]
public class RightButtonToolbarWindow : ExtendedToolbarWindow
{
static RightButtonToolbarWindow()
{
RegisterToolbarWindow<RightButtonToolbarWindow>( 90, 35 );
}
protected override void OnGUI()
{
base.OnGUI();
var rect = new Rect( 0, 0, position.width, position.height );
rect.y = 4;
if ( GUI.Button( rect, "2", Styles.commandButtonStyle ) )
{
// ...
}
}
}
[InitializeOnLoad]
public class SceneSwitchLeftButton
{
static SceneSwitchLeftButton()
{
ToolbarExtender.LeftToolbarGUI.Add(OnToolbarGUI);
}
static void OnToolbarGUI()
{
GUILayout.FlexibleSpace();
if(GUILayout.Button(new GUIContent("1", "Start Scene 1"), ToolbarStyles.commandButtonStyle))
{
SceneHelper.StartScene("Assets/ToolbarExtender/Example/Scenes/Scene1.unity");
}
if(GUILayout.Button(new GUIContent("2", "Start Scene 2"), ToolbarStyles.commandButtonStyle))
{
SceneHelper.StartScene("Assets/ToolbarExtender/Example/Scenes/Scene2.unity");
}
}
}
添加buttons,添加sliders,toggles等。请注意,由于代码依赖于反射来访问Unity的内部代码,所以这很麻烦。 使用新的Unity更新可能无法再使用它。
当前的解决方案由https://github.com/OndrejPetrzilka完成,并使用Unity的新UIElements代码和反射来连接工具栏的OnGUI回调。
4、 Unity WebGL透明(显示HTML背景)
https://qiita.com/kumatta_ss/items/b89b03d7b4892ec3c93f
参考站点等
为WebGL输出创建模板
复制模板
将以下目录中的「Default」拷贝到项目中 更改为「Test」
※默认值应安装在“C:\ Program Files”下
Unity\Hub\Editor\2018.3.5f1\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\WebGLTemplates
编辑“index.html”以显示确认
将以下内容添加到“index.html”
<style> body { background-color: #D0D0D0;} </style>
覆盖Unity的alpha缓冲区处理
在“Plugins”中创建名为“clear.jslib”的文件
var LibraryGLClear = {
glClear: function(mask)
{
if (mask == 0x00004000)
{
var v = GLctx.getParameter(GLctx.COLOR_WRITEMASK);
if (!v[0] && !v[1] && !v[2] && v[3])
// We are trying to clear alpha only -- skip.
return;
}
GLctx.clear(mask);
}
};
mergeInto(LibraryManager.library, LibraryGLClear);
更改构建模板
在“Player Settings ”中
在“Inspector”选项卡的“Respect and Presentation-> WebGL Template”中,选择上面创建的模板“Test”
构建完成之后查看: