diff --git a/Assets/Prefabs/Player.prefab b/Assets/Prefabs/Player.prefab deleted file mode 100644 index 6a1c431..0000000 --- a/Assets/Prefabs/Player.prefab +++ /dev/null @@ -1,162 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &354415133234764730 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 354415133234764729} - - component: {fileID: 354415133234764727} - - component: {fileID: 354415133234764728} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &354415133234764729 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 354415133234764730} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 2, z: 1} - m_Children: [] - m_Father: {fileID: 354415133841177158} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &354415133234764727 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 354415133234764730} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &354415133234764728 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 354415133234764730} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!1 &354415133841177159 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 354415133841177158} - - component: {fileID: 354415133841177157} - - component: {fileID: 354415133841177156} - - component: {fileID: 354415133841177155} - m_Layer: 0 - m_Name: Player - m_TagString: Player - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &354415133841177158 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 354415133841177159} - 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: - - {fileID: 354415133234764729} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &354415133841177157 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 354415133841177159} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6e86ea0dadc883746820f81edbde5cab, type: 3} - m_Name: - m_EditorClassIdentifier: - jumpHeight: 5 - jumpDuration: 0.4 - moveSpeed: 6 - accelerationTimeAirborne: 0.1 - accelerationTimeGrounded: 0.05 ---- !u!114 &354415133841177156 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 354415133841177159} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5b21a38e98a85794b9312e3ac293ad9f, type: 3} - m_Name: - m_EditorClassIdentifier: - collisionMask: - serializedVersion: 2 - m_Bits: 1024 - horizontalRayCount: 4 - verticalRayCount: 4 - maxClimbAngle: 60 - maxDescendAngle: 75 ---- !u!65 &354415133841177155 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 354415133841177159} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 2, z: 1} - m_Center: {x: 0, y: 0, z: 0} diff --git a/Assets/Prefabs/Player.prefab.meta b/Assets/Prefabs/Player.prefab.meta deleted file mode 100644 index 013559f..0000000 --- a/Assets/Prefabs/Player.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b29a944aaba25f643afdc6b049845662 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index b7f942e..bfb238d 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -54,7 +54,7 @@ LightmapSettings: m_EnableBakedLightmaps: 0 m_EnableRealtimeLightmaps: 0 m_LightmapEditorSettings: - serializedVersion: 10 + serializedVersion: 12 m_Resolution: 2 m_BakeResolution: 40 m_AtlasSize: 1024 @@ -62,6 +62,7 @@ LightmapSettings: m_AOMaxDistance: 1 m_CompAOExponent: 1 m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 m_Padding: 2 m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 @@ -76,10 +77,16 @@ LightmapSettings: m_PVRDirectSampleCount: 32 m_PVRSampleCount: 500 m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 m_PVRFilterTypeDirect: 0 m_PVRFilterTypeIndirect: 0 m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 1 + m_PVREnvironmentMIS: 0 m_PVRCulling: 1 m_PVRFilteringGaussRadiusDirect: 1 m_PVRFilteringGaussRadiusIndirect: 5 @@ -87,7 +94,9 @@ LightmapSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} m_UseShadowmask: 1 --- !u!196 &4 @@ -157,7 +166,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 38ce055dcd672554fae2b0acd2ca4761, type: 3} m_Name: m_EditorClassIdentifier: - player: {fileID: 1816857705} + player: {fileID: 0} --- !u!20 &519420031 Camera: m_ObjectHideFlags: 0 @@ -170,9 +179,10 @@ Camera: m_ClearFlags: 2 m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 @@ -289,6 +299,125 @@ Transform: type: 3} m_PrefabInstance: {fileID: 3004802641261297316} m_PrefabAsset: {fileID: 0} +--- !u!1 &937432970 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 937432976} + - component: {fileID: 937432975} + - component: {fileID: 937432974} + - component: {fileID: 937432973} + - component: {fileID: 937432972} + - component: {fileID: 937432971} + m_Layer: 8 + m_Name: Player + m_TagString: Player + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &937432971 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 937432970} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6e86ea0dadc883746820f81edbde5cab, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &937432972 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 937432970} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5b21a38e98a85794b9312e3ac293ad9f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!65 &937432973 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 937432970} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 0} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &937432974 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 937432970} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &937432975 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 937432970} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &937432976 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 937432970} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 2, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &957476665 PrefabInstance: m_ObjectHideFlags: 0 @@ -383,12 +512,14 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1327270570} m_Enabled: 1 - serializedVersion: 8 + serializedVersion: 10 m_Type: 1 + m_Shape: 0 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 1 m_Range: 10 m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 m_CookieSize: 10 m_Shadows: m_Type: 0 @@ -398,6 +529,24 @@ Light: m_Bias: 0.05 m_NormalBias: 0.4 m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 m_Cookie: {fileID: 0} m_DrawHalo: 0 m_Flare: {fileID: 0} @@ -405,12 +554,15 @@ Light: m_CullingMask: serializedVersion: 2 m_Bits: 4294967295 + m_RenderingLayerMask: 1 m_Lightmapping: 4 m_LightShadowCasterMode: 0 m_AreaSize: {x: 1, y: 1} m_BounceIntensity: 1 m_ColorTemperature: 6570 m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 --- !u!4 &1327270572 @@ -425,7 +577,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!4 &1337047246 stripped Transform: @@ -433,12 +585,6 @@ Transform: type: 3} m_PrefabInstance: {fileID: 957476665} m_PrefabAsset: {fileID: 0} ---- !u!4 &1816857705 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 354415133841177158, guid: b29a944aaba25f643afdc6b049845662, - type: 3} - m_PrefabInstance: {fileID: 354415134315853359} - m_PrefabAsset: {fileID: 0} --- !u!1 &2094910950 GameObject: m_ObjectHideFlags: 0 @@ -470,77 +616,8 @@ Transform: - {fileID: 209604418} - {fileID: 1337047246} m_Father: {fileID: 0} - m_RootOrder: 2 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1001 &354415134315853359 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 354415133841177159, guid: b29a944aaba25f643afdc6b049845662, - type: 3} - propertyPath: m_Name - value: Player - objectReference: {fileID: 0} - - target: {fileID: 354415133841177158, guid: b29a944aaba25f643afdc6b049845662, - type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 354415133841177158, guid: b29a944aaba25f643afdc6b049845662, - type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 354415133841177158, guid: b29a944aaba25f643afdc6b049845662, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 354415133841177158, guid: b29a944aaba25f643afdc6b049845662, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 354415133841177158, guid: b29a944aaba25f643afdc6b049845662, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 354415133841177158, guid: b29a944aaba25f643afdc6b049845662, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 354415133841177158, guid: b29a944aaba25f643afdc6b049845662, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 354415133841177158, guid: b29a944aaba25f643afdc6b049845662, - type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 354415133841177158, guid: b29a944aaba25f643afdc6b049845662, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 354415133841177158, guid: b29a944aaba25f643afdc6b049845662, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 354415133841177158, guid: b29a944aaba25f643afdc6b049845662, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: b29a944aaba25f643afdc6b049845662, type: 3} --- !u!1001 &3004802641261297316 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/MoveController.cs b/Assets/Scripts/MoveController.cs index e057740..6e1c8d8 100644 --- a/Assets/Scripts/MoveController.cs +++ b/Assets/Scripts/MoveController.cs @@ -2,252 +2,63 @@ using System.Collections.Generic; using UnityEngine; -[RequireComponent(typeof(BoxCollider))] +// MoveController controls movement for 2D characters +[RequireComponent(typeof(BoxCollider2D))] public class MoveController : MonoBehaviour { - public LayerMask collisionMask; - public const float skinWidth = 0.015f; + const float skinWidth = 0.015f; + public int horizontalRayCount = 4; public int verticalRayCount = 4; - public CollisionInfo collisions; - public float maxClimbAngle = 60f; - public float maxDescendAngle = 75f; - new private BoxCollider collider; - private RaycastOrigins raycastOrigins; private float horizontalRaySpacing; private float verticalRaySpacing; - private int frameCount; + + new BoxCollider2D collider; + RaycastOrigins raycastOrigins; void Start() { - collider = GetComponent(); - CalculateRaySpacing(); - frameCount = 0; + collider = GetComponent(); } - public void Move(Vector3 velocity) { - frameCount++; - + void Update() { UpdateRaycastOrigins(); - collisions.Reset(); - collisions.velocityOld = velocity; - - if (velocity.y < 0) { - DescendSlope(ref velocity); - } - if (velocity.x != 0) { - HorizontalCollisions(ref velocity); - } - if (velocity.y != 0) { - VerticalCollisions(ref velocity); - } - transform.Translate(velocity); - } - - private void HorizontalCollisions(ref Vector3 velocity) { - float directionX = Mathf.Sign(velocity.x); - float rayLength = Mathf.Abs(velocity.x) + skinWidth; - - for (int i = 0; i < horizontalRayCount; i++) { - Vector3 rayOrigin = (directionX == -1) ? raycastOrigins.bottomLeft : raycastOrigins.bottomRight; - rayOrigin += Vector3.up * (horizontalRaySpacing * i); - - RaycastHit hit; - if (!Physics.Raycast(rayOrigin, Vector3.right * directionX, out hit, rayLength, collisionMask)) { - Debug.DrawRay(rayOrigin + velocity, Vector3.right * directionX * rayLength, Color.green); - continue; - } - float slopeAngle = Vector3.Angle(hit.normal, Vector3.up); - if (i == 0 && slopeAngle <= maxClimbAngle) { - // if uh we're descending a slope and encounter another slope - // actually no we're not descending a slope we're climbing the - // other one. - if (collisions.descendingSlope) { - collisions.descendingSlope = false; - velocity = collisions.velocityOld; - } - - float distanceToSlopeStart = 0f; - if (slopeAngle!= collisions.slopeAngleOld) { - distanceToSlopeStart = hit.distance - skinWidth; - velocity.x -= distanceToSlopeStart * directionX; - } - ClimbSlope(ref velocity, slopeAngle); - // I do not remember why he put this back in, but this line - // causes my character to go through the floor when a slope - // meets another slope. - velocity.x += distanceToSlopeStart * directionX; - Debug.DrawRay(rayOrigin + velocity, Vector3.right * directionX * rayLength, Color.magenta); - } - - if (!collisions.climbingSlope || slopeAngle > maxClimbAngle) { - velocity.x = (hit.distance - skinWidth) * directionX; - rayLength = hit.distance; - - if (collisions.climbingSlope) { - velocity.y = Mathf.Tan(collisions.slopeAngle * Mathf.Deg2Rad) * Mathf.Abs(velocity.x); - } - - Debug.DrawRay(rayOrigin + velocity, Vector3.right * directionX * rayLength, Color.red); - - if (directionX == -1) { - collisions.left = true; - } else { - collisions.right = true; - } - } - } - return; - } - - private void VerticalCollisions(ref Vector3 velocity) { - float directionY = velocity.y > Mathf.Epsilon ? 1 : -1; - // float directionY = Mathf.Sign(velocity.y); // -1 for down, 1 for up - float rayLength = Mathf.Abs(velocity.y) + skinWidth; - - bool hasHit = false; - float hitDistance = 0f; + CalculateRaySpacing(); for (int i = 0; i < verticalRayCount; i++) { - Vector3 rayOrigin = (directionY == -1) ? raycastOrigins.bottomLeft : raycastOrigins.topLeft; - rayOrigin += Vector3.right * (verticalRaySpacing * i + velocity.x); - - RaycastHit hit; - if (!Physics.Raycast(rayOrigin, Vector3.up * directionY, out hit, rayLength, collisionMask)) { - Debug.DrawRay(rayOrigin + velocity, Vector3.up * directionY * rayLength, Color.green); - continue; - } - - //Debug.Log("Hit distance: " + hit.distance); - rayLength = hit.distance; - hasHit = true; - hitDistance = hit.distance; - Debug.DrawRay(rayOrigin, Vector3.up * directionY * rayLength, Color.red); - } - - if (hasHit) { - // TODO: what the fuck is this 1.5f doing here - velocity.y = (hitDistance - 1.5f*skinWidth) * directionY; - if (directionY == -1) { - collisions.below = true; - } else { - collisions.above = true; - } - } - - if (collisions.climbingSlope) { - velocity.x = velocity.y / Mathf.Tan(collisions.slopeAngle * Mathf.Deg2Rad) * Mathf.Sign(velocity.x); - } - - // checks for a change in slope while climbing a slope - if (collisions.climbingSlope) { - float directionX = Mathf.Sign(velocity.x); - rayLength = Mathf.Abs(velocity.x) + skinWidth; - Vector3 rayOrigin = (directionY == -1) ? raycastOrigins.bottomLeft : raycastOrigins.bottomRight; - rayOrigin += (Vector3.up * velocity.y); - RaycastHit hit; - if (Physics.Raycast(rayOrigin, Vector3.right * directionX, out hit, rayLength, collisionMask)) { - float slopeAngle = Vector3.Angle(hit.normal, Vector3.up); - if (slopeAngle != collisions.slopeAngle) { - velocity.x = (hit.distance - skinWidth) * directionX; - collisions.slopeAngle = slopeAngle; - } - } - } - } - - private void ClimbSlope(ref Vector3 velocity, float slopeAngle) { - float dist = Mathf.Abs(velocity.x); - float climbY = Mathf.Sin(slopeAngle * Mathf.Deg2Rad) * dist; - if (velocity.y <= climbY) { - velocity.y = climbY; - velocity.x = Mathf.Cos(slopeAngle * Mathf.Deg2Rad) * dist * Mathf.Sign(velocity.x); - collisions.below = true; - collisions.climbingSlope = true; - collisions.slopeAngle = slopeAngle; - } - } - - private void DescendSlope(ref Vector3 velocity) { - float directionX = Mathf.Sign(velocity.x); - // cast a ray downwards from the trailing corner of the collider - Vector3 rayOrigin = (directionX == -1) ? raycastOrigins.bottomRight : raycastOrigins.bottomLeft; - RaycastHit hit; - if (!Physics.Raycast(rayOrigin, Vector3.down, out hit, Mathf.Infinity, collisionMask)) { - return; - } - - float slopeAngle = Vector3.Angle(hit.normal, Vector3.up); - if (slopeAngle == 0 || slopeAngle > maxDescendAngle) { - return; - } - - if (Mathf.Sign(hit.normal.x) != directionX) { - return; - } - - if (hit.distance - skinWidth <= Mathf.Tan(slopeAngle * Mathf.Deg2Rad) * Mathf.Abs(velocity.x)) { - float moveDistance = Mathf.Abs(velocity.x); - float descendY = Mathf.Sin(slopeAngle * Mathf.Deg2Rad) * moveDistance; - velocity.x = Mathf.Cos(slopeAngle * Mathf.Deg2Rad) * moveDistance * Mathf.Sign(velocity.x); - velocity.y -= descendY; - collisions.below = true; // grounded - collisions.slopeAngle = slopeAngle; - collisions.descendingSlope = true; + Debug.DrawRay(raycastOrigins.bottomLeft + Vector2.right * verticalRaySpacing * i, Vector2.up * -2, Color.red); } } void UpdateRaycastOrigins() { Bounds bounds = collider.bounds; - float depth = (bounds.max.z + bounds.min.z) * 0.5f; bounds.Expand(skinWidth * -2); - raycastOrigins.bottomLeft = new Vector3(bounds.min.x, bounds.min.y, depth); - raycastOrigins.topLeft = new Vector3(bounds.min.x, bounds.max.y, depth); - raycastOrigins.bottomRight = new Vector3(bounds.max.x, bounds.min.y, depth); - raycastOrigins.topRight = new Vector3(bounds.max.x, bounds.max.y, depth); + raycastOrigins.bottomLeft = new Vector2(bounds.min.x, bounds.min.y); + raycastOrigins.bottomRight = new Vector2(bounds.max.x, bounds.min.y); + raycastOrigins.topLeft = new Vector2(bounds.min.x, bounds.max.y); + raycastOrigins.topRight = new Vector2(bounds.max.x, bounds.max.y); } void CalculateRaySpacing() { Bounds bounds = collider.bounds; bounds.Expand(skinWidth * -2); - if (horizontalRayCount < 2) { horizontalRayCount = 2; } - if (verticalRayCount < 2) { verticalRayCount = 2; } + if (horizontalRayCount < 2) { + horizontalRayCount = 2; + } + if (verticalRayCount < 2) { + verticalRayCount = 2; + } horizontalRaySpacing = bounds.size.y / (horizontalRayCount - 1); verticalRaySpacing = bounds.size.x / (verticalRayCount - 1); } - public bool Grounded() { return collisions.below; } - struct RaycastOrigins { - public Vector3 topLeft; - public Vector3 topRight; - public Vector3 bottomLeft; - public Vector3 bottomRight; - } - - public struct CollisionInfo { - public bool above; - public bool below; - public bool left; - public bool right; - public bool climbingSlope; - public bool descendingSlope; - public float slopeAngle; - public float slopeAngleOld; - public Vector3 velocityOld; - - public void Reset() { - above = false; - below = false; - left = false; - right = false; - climbingSlope = false; - descendingSlope = false; - slopeAngleOld = slopeAngle; - slopeAngle = 0f; - } + public Vector2 topLeft; + public Vector2 topRight; + public Vector2 bottomLeft; + public Vector2 bottomRight; } } diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs index 0bdca2f..e2bc80e 100644 --- a/Assets/Scripts/PlayerController.cs +++ b/Assets/Scripts/PlayerController.cs @@ -4,57 +4,24 @@ using UnityEngine; [RequireComponent(typeof(MoveController))] public class PlayerController : MonoBehaviour { - - public float jumpHeight = 5f; - public float jumpDuration = 0.4f; - public float moveSpeed = 6f; - public float accelerationTimeAirborne = 0.1f; - public float accelerationTimeGrounded = 0.05f; - - private Vector3 velocity; - private float jumpVelocity; private MoveController moveController; - private float gravity; - private float moveXSmoothing; void Start() { moveController = GetComponent(); - gravity = -(2*jumpHeight)/Mathf.Pow(jumpDuration, 2f); - jumpVelocity = Mathf.Abs(gravity) * jumpDuration; } void Update() { - if (moveController.collisions.above || moveController.collisions.below) { - velocity.y = 0; - } - if (moveController.collisions.left || moveController.collisions.right) { - velocity.x = 0; - } - - Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); - if (Input.GetKeyDown(KeyCode.Space) && moveController.collisions.below) { - velocity.y = jumpVelocity; - } - - float targetx = input.x * moveSpeed; - velocity.x = Mathf.SmoothDamp(velocity.x, targetx, ref moveXSmoothing, moveController.Grounded() ? accelerationTimeGrounded : accelerationTimeAirborne); - velocity.y += gravity * Time.deltaTime; - Debug.LogFormat("Grounded: {0}", moveController.Grounded()); - moveController.Move(velocity * Time.deltaTime); } void FixedUpdate() { } void OnDestroy() { - Debug.Log("I'm dead"); } void OnCollisionEnter(Collision other) { - // Debug.LogFormat("Player collided with {0}", other); } void OnTriggerEnter(Collider other) { - // Debug.LogFormat("Player triggered other: {0}", other); } } diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 8051a5e..756292e 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -13,7 +13,7 @@ TagManager: - UI - - - - + - Player - - Level -