diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 0000000..f019fd0 --- /dev/null +++ b/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/Assets/Scripts/GameManager.cs b/Assets/Scripts/GameManager.cs index 5f515c6..35258e1 100644 --- a/Assets/Scripts/GameManager.cs +++ b/Assets/Scripts/GameManager.cs @@ -13,6 +13,11 @@ public class GameManager : MonoBehaviour { private int score = 0; // 게임 점수 + // 게임의 스피드를 올리는 변수 + public float gameSpeed = 1f; + public float speedIncreaseRate = 0.05f; + public float maxGameSpeed = 2f; + // 게임 시작과 동시에 싱글톤을 구성 void Awake() { // 싱글톤 변수 instance가 비어있는가? @@ -38,6 +43,14 @@ public class GameManager : MonoBehaviour { { SceneManager.LoadScene(SceneManager.GetActiveScene().name); } + + if (!isGameover) + { + // 게임 진행시 게임 속도는 시간에 따라 증가 + gameSpeed += speedIncreaseRate * Time.deltaTime; + // 게임 최대 속도는 max를 넘어서지 못하게 + gameSpeed = Mathf.Min(gameSpeed, maxGameSpeed); + } } // 점수를 증가시키는 메서드 diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs index 25141b1..30676df 100644 --- a/Assets/Scripts/PlayerController.cs +++ b/Assets/Scripts/PlayerController.cs @@ -9,16 +9,29 @@ public class PlayerController : MonoBehaviour { private bool isGrounded = false; // 바닥에 닿았는지 나타냄 private bool isDead = false; // 사망 상태 + private bool isSliding = false; // 슬라이딩 상태 + private Rigidbody2D playerRigidbody; // 사용할 리지드바디 컴포넌트 private Animator animator; // 사용할 애니메이터 컴포넌트 private AudioSource playerAudio; // 사용할 오디오 소스 컴포넌트 + private CapsuleCollider2D playerCollider; // 플레이어의 콜라이더 충돌 범위 + private Vector2 originalColliderSize; // 기본 자세일 때 콜라이더 크기 + private Vector2 originalColliderOffset; // 기본 자세일 때 콜라이더 중심 위치 + public Vector2 slidingColliderSize; // 슬라이딩 자세일 때 콜라이더 크기 + public Vector2 slidingColliderOffset; // 슬라이딩 자세일 때 콜라이더 중심 위치 + private void Start() { // 게임 오브젝트로부터 사용할 컴포넌트들을 가져와 변수에 할당 playerRigidbody = GetComponent(); animator = GetComponent(); playerAudio = GetComponent(); - } + + // 게임 콜라이더를 가져와서 현 상태를 저장 + playerCollider = GetComponent(); + originalColliderSize = playerCollider.size; + originalColliderOffset = playerCollider.offset; + } private void Update() { if(isDead) @@ -46,6 +59,16 @@ public class PlayerController : MonoBehaviour { } animator.SetBool("Grounded", isGrounded); + + // 마우스 오른쪽 버튼을 누르고 땅에 있는 상태이며 슬라이딩이 아닌 상태면 슬라이딩 작동 + if (Input.GetMouseButtonDown(1) && isGrounded && !isSliding) + { + StartSlide(); + } + else if (Input.GetMouseButtonUp(1) && isSliding) + { + EndSlide(); + } } private void Die() { @@ -83,4 +106,22 @@ public class PlayerController : MonoBehaviour { // 바닥에서 벗어났음을 감지하는 처리 isGrounded = false; } + + private void StartSlide() + { + isSliding = true; + animator.SetBool("Sliding", true); + + playerCollider.size = slidingColliderSize; + playerCollider.offset = slidingColliderOffset; + } + + private void EndSlide() + { + isSliding = false; + animator.SetBool("Sliding", false); + + playerCollider.size = originalColliderSize; + playerCollider.offset = originalColliderOffset; + } } \ No newline at end of file diff --git a/Assets/Scripts/ScrollingObject.cs b/Assets/Scripts/ScrollingObject.cs index 2c9bdcd..a44d3f0 100644 --- a/Assets/Scripts/ScrollingObject.cs +++ b/Assets/Scripts/ScrollingObject.cs @@ -8,7 +8,7 @@ public class ScrollingObject : MonoBehaviour { // 게임 오브젝트를 왼쪽으로 일정 속도로 평행 이동하는 처리 if(!GameManager.instance.isGameover) { - transform.Translate(Vector3.left * speed * Time.deltaTime); + transform.Translate(Vector3.left * speed * GameManager.instance.gameSpeed * Time.deltaTime); } } } \ No newline at end of file diff --git a/Assets/Sence/Main.unity b/Assets/Sence/Main.unity index 83a9d07..9c73e43 100644 --- a/Assets/Sence/Main.unity +++ b/Assets/Sence/Main.unity @@ -725,9 +725,9 @@ GameObject: - component: {fileID: 678767704} - component: {fileID: 678767703} - component: {fileID: 678767706} - - component: {fileID: 678767702} - component: {fileID: 678767701} - component: {fileID: 678767700} + - component: {fileID: 678767707} m_Layer: 0 m_Name: Player m_TagString: Player @@ -854,42 +854,6 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 ---- !u!58 &678767702 -CircleCollider2D: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 678767699} - 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: 0 - m_UsedByEffector: 0 - m_CompositeOperation: 0 - m_CompositeOrder: 0 - m_Offset: {x: 0, y: -0.57} - m_Radius: 0.2 --- !u!50 &678767703 Rigidbody2D: serializedVersion: 5 @@ -1006,6 +970,45 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::PlayerController deathClip: {fileID: 8300000, guid: 668a107660fa54fe98e03b698a09aa49, type: 3} jumpForce: 700 + slidingColliderSize: {x: 1.2, y: 0.6} + slidingColliderOffset: {x: 0, y: -0.7} +--- !u!70 &678767707 +CapsuleCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678767699} + 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_Size: {x: 0.8, y: 2} + m_Direction: 0 --- !u!1 &1190534666 GameObject: m_ObjectHideFlags: 0 @@ -1628,6 +1631,9 @@ MonoBehaviour: isGameover: 0 scoreText: {fileID: 1607182866} gameoverUI: {fileID: 265399405} + gameSpeed: 1 + speedIncreaseRate: 0.05 + maxGameSpeed: 2 --- !u!4 &2028254430 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Sprites/JJ_Slide.png b/Assets/Sprites/JJ_Slide.png new file mode 100644 index 0000000..0ba200e Binary files /dev/null and b/Assets/Sprites/JJ_Slide.png differ diff --git a/Assets/Sprites/JJ_Slide.png.meta b/Assets/Sprites/JJ_Slide.png.meta new file mode 100644 index 0000000..7cf33db --- /dev/null +++ b/Assets/Sprites/JJ_Slide.png.meta @@ -0,0 +1,299 @@ +fileFormatVersion: 2 +guid: ba4ab248b8114dcabba3c8afae55abff +TextureImporter: + internalIDToNameTable: + - first: + 213: 5059711287869928597 + second: JJ_Slide_0 + - first: + 213: 9217812641606536001 + second: JJ_Slide_1 + - first: + 213: -1698837454444704123 + second: JJ_Slide_2 + - first: + 213: -4094449989520593375 + second: JJ_Slide_3 + - first: + 213: -4828945674683565807 + second: JJ_Slide_4 + - first: + 213: 8314547675191383737 + second: JJ_Slide_5 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 30 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: JJ_Slide_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 7a3e3bd21d4f46cd0800000000000000 + internalID: 5059711287869928597 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: JJ_Slide_1 + rect: + serializedVersion: 2 + x: 64 + y: 0 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 476ad4dd85eb4b830800000000000000 + internalID: 9217812641606536001 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: JJ_Slide_2 + rect: + serializedVersion: 2 + x: 128 + y: 0 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 3aa4ab81e13d4a5f0800000000000000 + internalID: -1698837454444704123 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: JJ_Slide_3 + rect: + serializedVersion: 2 + x: 192 + y: 0 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 1a52c8a328d342620800000000000000 + internalID: -4094449989520593375 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: JJ_Slide_4 + rect: + serializedVersion: 2 + x: 256 + y: 0 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 2826b418bf1640ef0800000000000000 + internalID: -4828945674683565807 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: JJ_Slide_5 + rect: + serializedVersion: 2 + x: 320 + y: 0 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 115cf86da211444d0800000000000000 + internalID: 8314547675191383737 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + JJ_Slide_0: 5059711287869928597 + JJ_Slide_1: 9217812641606536001 + JJ_Slide_2: -1698837454444704123 + JJ_Slide_3: -4094449989520593375 + JJ_Slide_4: -4828945674683565807 + JJ_Slide_5: 8314547675191383737 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: