Skip to content

Commit 373274d

Browse files
committed
Merge branch 'master' into 2021.3-urp
# Conflicts: # Assets/Scenes/Main.unity # Packages/manifest.json # Packages/packages-lock.json
2 parents 853511d + a8af4ca commit 373274d

File tree

15 files changed

+227
-51
lines changed

15 files changed

+227
-51
lines changed

Assets/Plugins/WebGL/WebBridge/CommonCommands.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,17 @@ public void CheckOnlineStatus()
382382
Debug.Log($"<color=#4D65A4>Online Status:</color> {(isOnline ? "<color=#3bb508>Connected</color>" : "<color=#b50808>Disconnected</color>")}");
383383
}
384384

385+
/// <summary>
386+
/// Sets the CSS cursor style for the Unity canvas element.
387+
/// Browser Usage: <code>unityGame.SendMessage("WebGL", "SetCursor", "pointer");</code>
388+
/// </summary>
389+
/// <param name="cursorName">CSS cursor value (e.g., "default", "pointer", "grab", "crosshair", "text")</param>
390+
[WebCommand(Description = "Set the CSS cursor style")]
391+
public void SetCursor(string cursorName)
392+
{
393+
WebToolPlugins.SetCursor(cursorName);
394+
}
395+
385396
/// <summary>
386397
/// Captures the current screen and saves it as a PNG file.
387398
/// </summary>

Assets/Plugins/WebGL/WebTools/EventListeners/WebEventListeners.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
using System;
1212
using System.Collections.Generic;
13+
using System.Diagnostics;
1314
using System.Runtime.InteropServices;
1415
using UnityEngine;
1516

@@ -36,6 +37,7 @@ private static void OnBeforeSceneLoadRuntimeMethod()
3637
}
3738
#endif
3839

40+
[Conditional("UNITY_WEBGL")]
3941
public static void AddEventListener(string eventName, Action callback)
4042
{
4143
instance.AddEventListenerInternal(eventName, callback);
@@ -59,7 +61,7 @@ private void AddEventListenerInternal(string eventName, Action callback)
5961
// Add event listener on javascript side
6062
_AddJsEventListener(eventName);
6163
#elif UNITY_EDITOR && WEBTOOLS_LOG_CALLS
62-
Debug.Log($"<color=#00CCCC>{nameof(WebEventListeners)}.{nameof(AddEventListenerInternal)} add callback for {eventName}</color>");
64+
UnityEngine.Debug.Log($"<color=#00CCCC>{nameof(WebEventListeners)}.{nameof(AddEventListenerInternal)} add callback for {eventName}</color>");
6365
#endif
6466
}
6567
}

Assets/Plugins/WebGL/WebTools/WebToolPlugins.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public static class WebToolPlugins
4444
private static extern void _DownloadFile(string filename, string content);
4545
[DllImport("__Internal")]
4646
private static extern void _DownloadBlob(string filename, byte[] byteArray, int byteLength, string mimeType);
47+
[DllImport("__Internal")]
48+
private static extern void _SetCursor(string cursorName);
4749

4850
#endif
4951

@@ -305,5 +307,27 @@ public static void DownloadBinaryFile(string filename, byte[] data, string mimeT
305307
Debug.Log($"{nameof(WebToolPlugins)}.{nameof(DownloadBinaryFile)} called with filename: {filename}");
306308
#endif
307309
}
310+
311+
/// <summary>
312+
/// Sets the CSS cursor style for the Unity canvas element.
313+
/// </summary>
314+
/// <param name="cursorName">The CSS cursor value (e.g., "pointer", "grab", "crosshair", "text", "default")</param>
315+
/// <example>
316+
/// <code>
317+
/// // Example: Change cursor to pointer on hover
318+
/// WebToolPlugins.SetCursor("pointer");
319+
///
320+
/// // Example: Reset to default cursor
321+
/// WebToolPlugins.SetCursor("default");
322+
/// </code>
323+
/// </example>
324+
public static void SetCursor(string cursorName)
325+
{
326+
#if UNITY_WEBGL && !UNITY_EDITOR
327+
_SetCursor(cursorName);
328+
#elif UNITY_EDITOR && WEBTOOLS_LOG_CALLS
329+
Debug.Log($"{nameof(WebToolPlugins)}.{nameof(SetCursor)} called with cursor: {cursorName}");
330+
#endif
331+
}
308332
}
309333
}

Assets/Plugins/WebGL/WebTools/WebToolPlugins.jslib

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,21 @@ var WebGlPlugins =
154154
element.click();
155155
document.body.removeChild(element);
156156
URL.revokeObjectURL(url);
157+
},
158+
159+
_SetCursor: function(cursorName) {
160+
var cursorStr = UTF8ToString(cursorName);
161+
// Check if canvas variable exists from the Unity template
162+
var canvasElement = (typeof canvas !== 'undefined') ? canvas : null;
163+
if (!canvasElement) {
164+
canvasElement = document.getElementById('unity-canvas');
165+
}
166+
if (!canvasElement) {
167+
canvasElement = document.querySelector('canvas');
168+
}
169+
if (canvasElement) {
170+
canvasElement.style.cursor = cursorStr;
171+
}
157172
}
158173
};
159174

Assets/Prefabs/RigidbodyCube.prefab

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ GameObject:
1313
- component: {fileID: 23875290202771946}
1414
- component: {fileID: 65366149667932608}
1515
- component: {fileID: 54003196623453922}
16+
- component: {fileID: 265791508532593724}
1617
m_Layer: 0
1718
m_Name: RigidbodyCube
1819
m_TagString: Untagged
@@ -114,3 +115,17 @@ Rigidbody:
114115
m_Interpolate: 0
115116
m_Constraints: 0
116117
m_CollisionDetection: 1
118+
--- !u!114 &265791508532593724
119+
MonoBehaviour:
120+
m_ObjectHideFlags: 0
121+
m_CorrespondingSourceObject: {fileID: 0}
122+
m_PrefabInstance: {fileID: 0}
123+
m_PrefabAsset: {fileID: 0}
124+
m_GameObject: {fileID: 1293945906612296}
125+
m_Enabled: 1
126+
m_EditorHideFlags: 0
127+
m_Script: {fileID: 11500000, guid: 7cd0ca8b7204d4214b198040d886c542, type: 3}
128+
m_Name:
129+
m_EditorClassIdentifier:
130+
CursorEnteredName: pointer
131+
CursorExitedName: default

Assets/Scenes/Main.unity

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ OcclusionCullingSettings:
1313
--- !u!104 &2
1414
RenderSettings:
1515
m_ObjectHideFlags: 0
16-
serializedVersion: 9
16+
serializedVersion: 10
1717
m_Fog: 0
1818
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
1919
m_FogMode: 3
@@ -42,8 +42,8 @@ RenderSettings:
4242
--- !u!157 &3
4343
LightmapSettings:
4444
m_ObjectHideFlags: 0
45-
serializedVersion: 12
46-
m_GIWorkflowMode: 0
45+
serializedVersion: 13
46+
m_BakeOnSceneLoad: 0
4747
m_GISettings:
4848
serializedVersion: 2
4949
m_BounceScale: 1
@@ -66,9 +66,6 @@ LightmapSettings:
6666
m_LightmapParameters: {fileID: 0}
6767
m_LightmapsBakeMode: 1
6868
m_TextureCompression: 1
69-
m_FinalGather: 0
70-
m_FinalGatherFiltering: 1
71-
m_FinalGatherRayCount: 256
7269
m_ReflectionCompression: 2
7370
m_MixedBakeMode: 2
7471
m_BakeBackend: 1
@@ -198,9 +195,8 @@ Light:
198195
m_PrefabAsset: {fileID: 0}
199196
m_GameObject: {fileID: 170076733}
200197
m_Enabled: 1
201-
serializedVersion: 10
198+
serializedVersion: 11
202199
m_Type: 1
203-
m_Shape: 0
204200
m_Color: {r: 0.99215686, g: 0.96962065, b: 0.85490197, a: 1}
205201
m_Intensity: 0.7
206202
m_Range: 10
@@ -250,8 +246,12 @@ Light:
250246
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
251247
m_UseBoundingSphereOverride: 0
252248
m_UseViewFrustumForShadowCasterCull: 1
249+
m_ForceVisible: 0
253250
m_ShadowRadius: 0
254251
m_ShadowAngle: 0
252+
m_LightUnit: 1
253+
m_LuxAtDistance: 1
254+
m_EnableSpotReflector: 1
255255
--- !u!4 &170076735
256256
Transform:
257257
m_ObjectHideFlags: 0
@@ -455,6 +455,9 @@ MeshRenderer:
455455
m_ReflectionProbeUsage: 1
456456
m_RayTracingMode: 2
457457
m_RayTraceProcedural: 0
458+
m_RayTracingAccelStructBuildFlagsOverride: 0
459+
m_RayTracingAccelStructBuildFlags: 1
460+
m_SmallMeshCulling: 1
458461
m_RenderingLayerMask: 4294967295
459462
m_RendererPriority: 0
460463
m_Materials:
@@ -877,6 +880,7 @@ GameObject:
877880
- component: {fileID: 2066011077}
878881
- component: {fileID: 2066011076}
879882
- component: {fileID: 2066011080}
883+
- component: {fileID: 2066011081}
880884
m_Layer: 0
881885
m_Name: RotatingCube
882886
m_TagString: Untagged
@@ -914,6 +918,9 @@ MeshRenderer:
914918
m_ReflectionProbeUsage: 1
915919
m_RayTracingMode: 2
916920
m_RayTraceProcedural: 0
921+
m_RayTracingAccelStructBuildFlagsOverride: 0
922+
m_RayTracingAccelStructBuildFlags: 1
923+
m_SmallMeshCulling: 1
917924
m_RenderingLayerMask: 4294967295
918925
m_RendererPriority: 0
919926
m_Materials:
@@ -978,3 +985,29 @@ MonoBehaviour:
978985
rotationAxis: {x: 0, y: 1, z: 0}
979986
degreePerSecond: 90
980987
updateType: 0
988+
--- !u!114 &2066011081
989+
MonoBehaviour:
990+
m_ObjectHideFlags: 0
991+
m_CorrespondingSourceObject: {fileID: 0}
992+
m_PrefabInstance: {fileID: 0}
993+
m_PrefabAsset: {fileID: 0}
994+
m_GameObject: {fileID: 2066011075}
995+
m_Enabled: 1
996+
m_EditorHideFlags: 0
997+
m_Script: {fileID: 11500000, guid: 7cd0ca8b7204d4214b198040d886c542, type: 3}
998+
m_Name:
999+
m_EditorClassIdentifier:
1000+
CursorEnteredName: pointer
1001+
CursorExitedName: default
1002+
--- !u!1660057539 &9223372036854775807
1003+
SceneRoots:
1004+
m_ObjectHideFlags: 0
1005+
m_Roots:
1006+
- {fileID: 10080510}
1007+
- {fileID: 2066011079}
1008+
- {fileID: 1116415928}
1009+
- {fileID: 624999762}
1010+
- {fileID: 1964540201}
1011+
- {fileID: 170076735}
1012+
- {fileID: 1530667642}
1013+
- {fileID: 1401030098}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// --------------------------------------------------------------------------------------------------------------------
2+
// <copyright file="ChangeCursorExample.cs">
3+
// Copyright (c) 2025 Johannes Deml. All rights reserved.
4+
// </copyright>
5+
// <author>
6+
// Johannes Deml
7+
// public@deml.io
8+
// </author>
9+
// --------------------------------------------------------------------------------------------------------------------
10+
11+
using UnityEngine;
12+
13+
namespace Supyrb
14+
{
15+
public class ChangeCursorExample : MonoBehaviour
16+
{
17+
public string CursorEnteredName = "pointer";
18+
public string CursorExitedName = "default";
19+
20+
private void OnMouseEnter()
21+
{
22+
WebToolPlugins.SetCursor(CursorEnteredName);
23+
}
24+
25+
private void OnMouseExit()
26+
{
27+
WebToolPlugins.SetCursor(CursorExitedName);
28+
}
29+
30+
private void OnMouseDown()
31+
{
32+
Destroy(gameObject);
33+
}
34+
}
35+
}

Assets/Scripts/ChangeCursorExample.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Scripts/Editor/BuildScript.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,20 @@ public static class BuildScript
3434
private static bool LogVerboseBatchMode = true;
3535
private static bool LogVerboseInEditor = false;
3636
private static readonly string CodeOptimizationSpeed =
37-
#if UNITY_2021_3_OR_NEWER
37+
#if UNITY_2022_1_OR_NEWER
3838
CodeOptimizationWebGL.RuntimeSpeedLTO.ToString();
3939
#else
4040
"speed";
4141
#endif
4242
private static readonly string CodeOptimizationSize =
43-
#if UNITY_2021_3_OR_NEWER
43+
#if UNITY_2022_1_OR_NEWER
4444
CodeOptimizationWebGL.DiskSizeLTO.ToString();
4545
#else
4646
"size";
4747
#endif
4848

4949
private static readonly string CodeOptimizationBuildTimes =
50-
#if UNITY_2021_3_OR_NEWER
50+
#if UNITY_2022_1_OR_NEWER
5151
CodeOptimizationWebGL.BuildTimes.ToString();
5252
#else
5353
"size";
@@ -106,7 +106,11 @@ public static void Build(string[] args)
106106
break;
107107
}
108108
case BuildTarget.StandaloneOSX:
109+
#if UNITY_2021_3_OR_NEWER
110+
PlayerSettings.SetScriptingBackend(NamedBuildTarget.Standalone, ScriptingImplementation.Mono2x);
111+
#else
109112
PlayerSettings.SetScriptingBackend(BuildTargetGroup.Standalone, ScriptingImplementation.Mono2x);
113+
#endif
110114
break;
111115
case BuildTarget.WebGL:
112116
#if UNITY_2021_2_OR_NEWER

Assets/Scripts/ObjectSpawner.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,23 @@ private void SpawnObject()
102102
if (spawnedObjects.Count >= maxInstances)
103103
{
104104
var recycleGo = spawnedObjects.Dequeue();
105-
recycleGo.transform.localPosition = transform.position;
106-
recycleGo.transform.localRotation = transform.localRotation;
107-
spawnedObjects.Enqueue(recycleGo);
108-
return;
105+
if(recycleGo == null)
106+
{
107+
// If the spawned object was destroyed, we create a new one
108+
// Decrement spawn count since it will be incremented when created below
109+
totalSpawnCount--;
110+
}
111+
else
112+
{
113+
#if UNITY_2021_3_OR_NEWER
114+
recycleGo.transform.SetLocalPositionAndRotation(transform.position, transform.localRotation);
115+
#else
116+
recycleGo.transform.localPosition = transform.position;
117+
recycleGo.transform.localRotation = transform.localRotation;
118+
#endif
119+
spawnedObjects.Enqueue(recycleGo);
120+
return;
121+
}
109122
}
110123

111124
var newGo = InstantiatePrefab();

0 commit comments

Comments
 (0)