diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index c59787a..316ccc7 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -1648,6 +1648,81 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4848326f7db925d4fbcdb35f789b75f5, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &263107106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 263107107} + - component: {fileID: 263107109} + - component: {fileID: 263107108} + m_Layer: 5 + m_Name: block + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &263107107 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 263107106} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1007280066} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &263107108 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 263107106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: b0a7567624709ee45872c0e655845f2d, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &263107109 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 263107106} + m_CullTransparentMesh: 1 --- !u!1 &272342316 GameObject: m_ObjectHideFlags: 0 @@ -7099,6 +7174,142 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 915269245} m_CullTransparentMesh: 1 +--- !u!1 &949095340 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 949095341} + - component: {fileID: 949095343} + - component: {fileID: 949095342} + m_Layer: 5 + m_Name: t_value + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &949095341 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949095340} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1007280066} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &949095342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949095340} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: +0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 3055b5c28f94e6c4ea6b9a379bb315a5, type: 2} + m_sharedMaterial: {fileID: 2100000, guid: f0e824099790d3445af94a5b86b5cc4a, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 50 + m_fontSizeBase: 50 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 25 + m_fontSizeMax: 100 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 4096 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &949095343 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949095340} + m_CullTransparentMesh: 1 --- !u!1 &949261338 GameObject: m_ObjectHideFlags: 0 @@ -7799,6 +8010,118 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1005841922} m_CullTransparentMesh: 1 +--- !u!1 &1007280065 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1007280066} + - component: {fileID: 1007280070} + - component: {fileID: 1007280068} + - component: {fileID: 1007280069} + m_Layer: 5 + m_Name: LuckyRandomBlock + m_TagString: RandomBlock + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1007280066 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1007280065} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 263107107} + - {fileID: 949095341} + m_Father: {fileID: 2127274534} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 122.2, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!61 &1007280068 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1007280065} + m_Enabled: 1 + serializedVersion: 3 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_CompositeOperation: 0 + m_CompositeOrder: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Size: {x: 122.2, y: 100} + m_EdgeRadius: 0 +--- !u!114 &1007280069 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1007280065} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 970655c7570620b4b81080ce46bbd866, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1007280070 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1007280065} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f64d4b082a41a9e42804e2ddfb768398, type: 3} + m_Name: + m_EditorClassIdentifier: + i_bg: {fileID: 263107108} + t_value: {fileID: 949095342} --- !u!1 &1028843972 GameObject: m_ObjectHideFlags: 0 @@ -9460,6 +9783,7 @@ RectTransform: - {fileID: 1999037950} - {fileID: 48983097} - {fileID: 1757808306} + - {fileID: 2127274534} - {fileID: 1950932324} m_Father: {fileID: 48693080} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -9486,6 +9810,7 @@ MonoBehaviour: go_dropobj: {fileID: 6939998903098416576, guid: 762ff4ec5a22c6b45978c6b031b0e7e5, type: 3} tf_cup: {fileID: 995025953} tf_cupin: {fileID: 1836599685} + temp: {fileID: 1007280070} --- !u!1 &1292285443 GameObject: m_ObjectHideFlags: 0 @@ -16799,6 +17124,42 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 418.31} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2127274533 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2127274534} + m_Layer: 5 + m_Name: RandomBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2127274534 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2127274533} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1007280066} + m_Father: {fileID: 1257193656} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 330} + m_SizeDelta: {x: 0, y: 100} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &2139838681 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Game/Game_Lucky.cs b/Assets/Scripts/Game/Game_Lucky.cs index 0f6ca96..a7a5111 100644 --- a/Assets/Scripts/Game/Game_Lucky.cs +++ b/Assets/Scripts/Game/Game_Lucky.cs @@ -12,6 +12,7 @@ public class Game_Lucky : MonoBehaviour public Transform tf_cupin; // 컵 안 (공들이 들어가는 위치 부모) List list_dropobj = new List(); + public LuckyRandomBlock temp; // 회전 관련 변수 private bool isRotating = false; @@ -46,6 +47,8 @@ public class Game_Lucky : MonoBehaviour } } + temp.Set(); + Set_Ball(); Init_game(); Set_Texts(); diff --git a/Assets/Scripts/Game/LuckyGameObj.cs b/Assets/Scripts/Game/LuckyGameObj.cs index 9f5e188..661f978 100644 --- a/Assets/Scripts/Game/LuckyGameObj.cs +++ b/Assets/Scripts/Game/LuckyGameObj.cs @@ -54,6 +54,18 @@ public class LuckyGameObj : MonoBehaviour } } + private void OnTriggerEnter2D(Collider2D collision) + { + switch (collision.tag) + { + case "RandomBlock": + var lrb = collision.GetComponent(); + m_Amount = lrb.Get_Value(m_Amount); + m_Amount.Obfuscate(); + break; + } + } + void Set_Collision(int amount) { LobbyUI.Ins.m_Game_Lucky.Add_Amount(amount); diff --git a/Assets/Scripts/Game/LuckyRandomBlock.cs b/Assets/Scripts/Game/LuckyRandomBlock.cs new file mode 100644 index 0000000..20cfd90 --- /dev/null +++ b/Assets/Scripts/Game/LuckyRandomBlock.cs @@ -0,0 +1,54 @@ +using GUPS.AntiCheat.Protected; +using GUPS.AntiCheat.Protected.Collection; +using System; +using TMPro; +using UnityEngine; +using UnityEngine.UI; +using Random = UnityEngine.Random; + +public enum eRandomBlock { Minus, Plus, Multiplier, Divide } + +public class LuckyRandomBlock : MonoBehaviour +{ + public Image i_bg; + public TextMeshProUGUI t_value; + + eRandomBlock m_BlockType; + ProtectedInt32 m_Value; + float MoveSpeed; + + ProtectedList list_value = new ProtectedList { 1, 2, 3, 4, 5 }; + + public void Set() + { + // BlockType 랜덤 (Enum 전체 범위에서 선택) + int typeCount = Enum.GetValues(typeof(eRandomBlock)).Length; + m_BlockType = (eRandomBlock)Random.Range(0, typeCount); + + // Value 랜덤 (리스트에서 하나 뽑기) + int randIndex = Random.Range(0, list_value.Count); + m_Value = list_value[randIndex]; + + switch (m_BlockType) + { + case eRandomBlock.Minus: t_value.text = $"-{m_Value}"; i_bg.color = Color.red; break; + case eRandomBlock.Plus: t_value.text = $"+{m_Value}"; i_bg.color = Color.blue; break; + case eRandomBlock.Multiplier: t_value.text = $"x{m_Value}"; i_bg.color = Color.green; break; + case eRandomBlock.Divide: t_value.text = $"/{m_Value}"; i_bg.color = Color.grey; break; + } + + MoveSpeed = Random.Range(2f, 5f); + } + + public int Get_Value(int amount) + { + switch (m_BlockType) + { + case eRandomBlock.Minus: return amount - m_Value; + case eRandomBlock.Plus: return amount + m_Value; + case eRandomBlock.Multiplier: return amount * m_Value; + case eRandomBlock.Divide: return amount / m_Value; + } + return 0; + } +} \ No newline at end of file diff --git a/Assets/Scripts/Game/LuckyRandomBlock.cs.meta b/Assets/Scripts/Game/LuckyRandomBlock.cs.meta new file mode 100644 index 0000000..26631b5 --- /dev/null +++ b/Assets/Scripts/Game/LuckyRandomBlock.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f64d4b082a41a9e42804e2ddfb768398 \ No newline at end of file diff --git a/Assets/Scripts/Util/MatchRectToCollider.cs b/Assets/Scripts/Util/MatchRectToCollider.cs index e44993b..ac9d536 100644 --- a/Assets/Scripts/Util/MatchRectToCollider.cs +++ b/Assets/Scripts/Util/MatchRectToCollider.cs @@ -1,18 +1,24 @@ using UnityEngine; +[ExecuteAlways] [RequireComponent(typeof(RectTransform))] [RequireComponent(typeof(BoxCollider2D))] public class MatchRectToCollider : MonoBehaviour { + RectTransform rt; + BoxCollider2D col; + + void Awake() + { + rt = GetComponent(); + col = GetComponent(); + } + void UpdateCollider() { - RectTransform rt = GetComponent(); - BoxCollider2D col = GetComponent(); + if (rt == null || col == null) return; - // RectTransform의 크기를 collider size로 적용 col.size = rt.rect.size; - - // pivot 때문에 위치가 달라질 수 있으므로 offset 조정 col.offset = rt.rect.center; } @@ -21,9 +27,19 @@ public class MatchRectToCollider : MonoBehaviour UpdateCollider(); } - // 에디터에서 값 바뀔 때도 자동 반영 + void Update() + { + if (rt.hasChanged) + { + UpdateCollider(); + rt.hasChanged = false; + } + } + void OnValidate() { + rt = GetComponent(); + col = GetComponent(); UpdateCollider(); } } \ No newline at end of file