From face150a73c97f4eec57731a03a5461523ea9775 Mon Sep 17 00:00:00 2001 From: MaxAndreassenRPM Date: Thu, 23 Nov 2023 12:47:18 +0000 Subject: [PATCH] feat: simplifies photo capture element scripts --- .../AvatarCreator}/Elements.meta | 0 .../Elements/PhotoCaptureConfirmElement.cs | 21 +++ .../PhotoCaptureConfirmElement.cs.meta | 0 .../Elements/PhotoCaptureElement.cs | 41 ++--- .../Elements/PhotoCaptureElement.cs.meta | 0 .../Elements/PhotoCaptureElement.prefab | 31 +++- .../PhotoCaptureWithRetakeElement.prefab | 159 +++++++++++++++++- .../Elements/PhotoCaptureRetakeElement.cs | 58 ------- 8 files changed, 214 insertions(+), 96 deletions(-) rename {Samples~/AvatarCreatorSamples/Scripts => Runtime/AvatarCreator}/Elements.meta (100%) create mode 100644 Runtime/AvatarCreator/Elements/PhotoCaptureConfirmElement.cs rename Samples~/AvatarCreatorSamples/Scripts/Elements/PhotoCaptureRetakeElement.cs.meta => Runtime/AvatarCreator/Elements/PhotoCaptureConfirmElement.cs.meta (100%) rename {Samples~/AvatarCreatorSamples/Scripts => Runtime/AvatarCreator}/Elements/PhotoCaptureElement.cs (83%) rename {Samples~/AvatarCreatorSamples/Scripts => Runtime/AvatarCreator}/Elements/PhotoCaptureElement.cs.meta (100%) delete mode 100644 Samples~/AvatarCreatorSamples/Scripts/Elements/PhotoCaptureRetakeElement.cs diff --git a/Samples~/AvatarCreatorSamples/Scripts/Elements.meta b/Runtime/AvatarCreator/Elements.meta similarity index 100% rename from Samples~/AvatarCreatorSamples/Scripts/Elements.meta rename to Runtime/AvatarCreator/Elements.meta diff --git a/Runtime/AvatarCreator/Elements/PhotoCaptureConfirmElement.cs b/Runtime/AvatarCreator/Elements/PhotoCaptureConfirmElement.cs new file mode 100644 index 00000000..63626529 --- /dev/null +++ b/Runtime/AvatarCreator/Elements/PhotoCaptureConfirmElement.cs @@ -0,0 +1,21 @@ +using UnityEngine; +using UnityEngine.Events; + +public class PhotoCaptureConfirmElement : MonoBehaviour +{ + [Space(5)] + [Header("Events")] + public UnityEvent onPhotoCaptureConfirmed; + + private Texture2D selectedTexture; + + public void SetTexture(Texture2D texture) + { + selectedTexture = texture; + } + + public void ConfirmPhoto() + { + onPhotoCaptureConfirmed?.Invoke(selectedTexture); + } +} diff --git a/Samples~/AvatarCreatorSamples/Scripts/Elements/PhotoCaptureRetakeElement.cs.meta b/Runtime/AvatarCreator/Elements/PhotoCaptureConfirmElement.cs.meta similarity index 100% rename from Samples~/AvatarCreatorSamples/Scripts/Elements/PhotoCaptureRetakeElement.cs.meta rename to Runtime/AvatarCreator/Elements/PhotoCaptureConfirmElement.cs.meta diff --git a/Samples~/AvatarCreatorSamples/Scripts/Elements/PhotoCaptureElement.cs b/Runtime/AvatarCreator/Elements/PhotoCaptureElement.cs similarity index 83% rename from Samples~/AvatarCreatorSamples/Scripts/Elements/PhotoCaptureElement.cs rename to Runtime/AvatarCreator/Elements/PhotoCaptureElement.cs index a780aed6..d4b9d38d 100644 --- a/Samples~/AvatarCreatorSamples/Scripts/Elements/PhotoCaptureElement.cs +++ b/Runtime/AvatarCreator/Elements/PhotoCaptureElement.cs @@ -5,14 +5,11 @@ public class PhotoCaptureElement : MonoBehaviour { - [Header("Photo Capture Buttons")] - [SerializeField, Tooltip("Button taking the photo")] public Button takePhotoButton; - - [Header("Photo Capture Settings")] + [Header("Settings")] [SerializeField] private RawImage cameraTextureTarget; [Space(5)] - [Header("Photo Capture Events")] + [Header("Events")] public UnityEvent onPhotoCaptured; private WebCamTexture cameraTexture; @@ -20,12 +17,6 @@ public class PhotoCaptureElement : MonoBehaviour private void Awake() { InitializeCamera(); - takePhotoButton.onClick.AddListener(TakePhoto); - } - - private void OnDestroy() - { - takePhotoButton.onClick.RemoveListener(TakePhoto); } public void StartCamera() @@ -43,6 +34,20 @@ public void StopCamera() cameraTexture.Stop(); } } + + public void TakePhoto() + { + if (cameraTexture == null || !cameraTexture.isPlaying) + return; + + var texture = new Texture2D(cameraTextureTarget.texture.width, cameraTextureTarget.texture.height, TextureFormat.ARGB32, false); + texture.SetPixels(cameraTexture.GetPixels()); + texture.Apply(); + + StopCamera(); + + onPhotoCaptured?.Invoke(texture); + } private void InitializeCamera() { @@ -60,20 +65,6 @@ private void SetupPhotoBoothTexture(string textureName) cameraTextureTarget.texture = cameraTexture; } - private void TakePhoto() - { - if (cameraTexture == null || !cameraTexture.isPlaying) - return; - - var texture = new Texture2D(cameraTextureTarget.texture.width, cameraTextureTarget.texture.height, TextureFormat.ARGB32, false); - texture.SetPixels(cameraTexture.GetPixels()); - texture.Apply(); - - StopCamera(); - - onPhotoCaptured?.Invoke(texture); - } - private static WebCamDevice? GetWebCamDevice() { var devices = WebCamTexture.devices; diff --git a/Samples~/AvatarCreatorSamples/Scripts/Elements/PhotoCaptureElement.cs.meta b/Runtime/AvatarCreator/Elements/PhotoCaptureElement.cs.meta similarity index 100% rename from Samples~/AvatarCreatorSamples/Scripts/Elements/PhotoCaptureElement.cs.meta rename to Runtime/AvatarCreator/Elements/PhotoCaptureElement.cs.meta diff --git a/Samples~/AvatarCreatorSamples/Prefabs/Elements/PhotoCaptureElement.prefab b/Samples~/AvatarCreatorSamples/Prefabs/Elements/PhotoCaptureElement.prefab index 04241093..7e628324 100644 --- a/Samples~/AvatarCreatorSamples/Prefabs/Elements/PhotoCaptureElement.prefab +++ b/Samples~/AvatarCreatorSamples/Prefabs/Elements/PhotoCaptureElement.prefab @@ -120,7 +120,19 @@ MonoBehaviour: m_TargetGraphic: {fileID: 478533099485849275} m_OnClick: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 2661869294509717807} + m_TargetAssemblyTypeName: PhotoCaptureElement, ReadyPlayerMe.Core.AvatarCreator + m_MethodName: TakePhoto + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &478533099591268935 GameObject: m_ObjectHideFlags: 0 @@ -264,7 +276,7 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2599385092859443039} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: @@ -289,11 +301,22 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: cbd28a49a9d475c44b6330b33b212b42, type: 3} m_Name: m_EditorClassIdentifier: - takePhotoButton: {fileID: 478533099485849252} cameraTextureTarget: {fileID: 478533101296809636} onPhotoCaptured: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 478533099591268935} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &2772493456747415611 GameObject: m_ObjectHideFlags: 0 diff --git a/Samples~/AvatarCreatorSamples/Prefabs/Elements/PhotoCaptureWithRetakeElement.prefab b/Samples~/AvatarCreatorSamples/Prefabs/Elements/PhotoCaptureWithRetakeElement.prefab index 9f4c44ce..7eb12309 100644 --- a/Samples~/AvatarCreatorSamples/Prefabs/Elements/PhotoCaptureWithRetakeElement.prefab +++ b/Samples~/AvatarCreatorSamples/Prefabs/Elements/PhotoCaptureWithRetakeElement.prefab @@ -404,7 +404,19 @@ MonoBehaviour: m_TargetGraphic: {fileID: 9002801012519271861} m_OnClick: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 5920718505741648111} + m_TargetAssemblyTypeName: PhotoCaptureConfirmElement, ReadyPlayerMe.Core.AvatarCreator + m_MethodName: ConfirmPhoto + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &5783080387223977866 GameObject: m_ObjectHideFlags: 0 @@ -505,7 +517,7 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5920718505741648110} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: @@ -530,11 +542,70 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: cbd28a49a9d475c44b6330b33b212b42, type: 3} m_Name: m_EditorClassIdentifier: - takePhotoButton: {fileID: 8114457064649773333} cameraTextureTarget: {fileID: 8114457064313110805} onPhotoCaptured: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 7022141032107403024} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 8114457064649773335} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 4379579555830577598} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 5920718505741648112} + m_TargetAssemblyTypeName: PhotoCaptureElement, ReadyPlayerMe.Core.AvatarCreator + m_MethodName: StopCamera + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 5920718505741648111} + m_TargetAssemblyTypeName: PhotoCaptureConfirmElement, ReadyPlayerMe.Core.AvatarCreator + m_MethodName: SetTexture + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 --- !u!114 &5920718505741648111 MonoBehaviour: m_ObjectHideFlags: 0 @@ -547,11 +618,21 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 696f4cf6c3c6d434b8ab068afc2a8758, type: 3} m_Name: m_EditorClassIdentifier: - confirmPhotoButton: {fileID: 7103173979936244105} - retakePhotoButton: {fileID: 7540223026286860592} onPhotoCaptureConfirmed: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 8114457064687947254} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &7022141032107403024 GameObject: m_ObjectHideFlags: 0 @@ -672,7 +753,55 @@ MonoBehaviour: m_TargetGraphic: {fileID: 7553597193823120021} m_OnClick: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 8114457064649773335} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 7022141032107403024} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 4379579555830577598} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 5920718505741648112} + m_TargetAssemblyTypeName: PhotoCaptureElement, ReadyPlayerMe.Core.AvatarCreator + m_MethodName: StartCamera + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &8114457064313110807 GameObject: m_ObjectHideFlags: 0 @@ -866,7 +995,19 @@ MonoBehaviour: m_TargetGraphic: {fileID: 8114457064649773322} m_OnClick: m_PersistentCalls: - m_Calls: [] + m_Calls: + - m_Target: {fileID: 5920718505741648112} + m_TargetAssemblyTypeName: PhotoCaptureElement, ReadyPlayerMe.Core.AvatarCreator + m_MethodName: TakePhoto + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &8114457064687947254 GameObject: m_ObjectHideFlags: 0 diff --git a/Samples~/AvatarCreatorSamples/Scripts/Elements/PhotoCaptureRetakeElement.cs b/Samples~/AvatarCreatorSamples/Scripts/Elements/PhotoCaptureRetakeElement.cs deleted file mode 100644 index 6c644623..00000000 --- a/Samples~/AvatarCreatorSamples/Scripts/Elements/PhotoCaptureRetakeElement.cs +++ /dev/null @@ -1,58 +0,0 @@ -using UnityEngine; -using UnityEngine.Events; -using UnityEngine.UI; - -[RequireComponent(typeof(PhotoCaptureElement))] -public class PhotoCaptureRetakeElement : MonoBehaviour -{ - [Header("Retake Buttons")] - [SerializeField, Tooltip("Button for confirming the chosen photo")] private Button confirmPhotoButton; - [SerializeField, Tooltip("Button for retaking the photo")] private Button retakePhotoButton; - - [Space(5)] - [Header("Retake Events")] - public UnityEvent onPhotoCaptureConfirmed; - - private PhotoCaptureElement photoCaptureElement; - private Texture2D selectedTexture; - - private void Awake() - { - photoCaptureElement = GetComponent(); - photoCaptureElement.onPhotoCaptured.AddListener(OnPhotoCaptured); - retakePhotoButton.onClick.AddListener(RetakePhoto); - confirmPhotoButton.onClick.AddListener(ConfirmPhoto); - } - - private void OnDestroy() - { - photoCaptureElement.onPhotoCaptured.RemoveListener(OnPhotoCaptured); - retakePhotoButton.onClick.RemoveListener(RetakePhoto); - confirmPhotoButton.onClick.RemoveListener(ConfirmPhoto); - } - - private void OnPhotoCaptured(Texture2D texture) - { - selectedTexture = texture; - - retakePhotoButton.gameObject.SetActive(true); - confirmPhotoButton.gameObject.SetActive(true); - photoCaptureElement.takePhotoButton.gameObject.SetActive(false); - - photoCaptureElement.StopCamera(); - } - - private void RetakePhoto() - { - retakePhotoButton.gameObject.SetActive(false); - confirmPhotoButton.gameObject.SetActive(false); - photoCaptureElement.takePhotoButton.gameObject.SetActive(true); - - photoCaptureElement.StartCamera(); - } - - private void ConfirmPhoto() - { - onPhotoCaptureConfirmed?.Invoke(selectedTexture); - } -}