SAIMA/Assets//预制体/障碍物/BreakableObstacle.prefab
Roman b66d86645e 任务:开发人马分离系统
分析:
1.其是与马并列的存在
2.具有状态:Normal:骑在马背,Shoot:从发射到着地到平台,Walk:在平台行走,landing:降落,Recover:若成功降落至马背,从刚判定成功到恢复到Normal态的中间态,为Recover态,Dead:判定为失败的瞬间以后都为Dead态。
3.效果要求:到达障碍物前某一位置后,人自动弹射,降落至平台,然后开始匀速移动,脱离平台后降落,之后持续判定是进入Recover还是Dead态。进入Recover态后,修正其偏移,使其回到默认的位置,Dead后,触发GameOver事件。

子任务:使人紧紧跟随马
1.当人处于Normal态,每帧同步人的位置和旋转到马背某处。
效果正常。
DONE

子任务:设计障碍物
1.仅跑道有碰撞体。
2.在障碍物主体之前有触发器,保证用户通过时能检测到,当检测到人进入触发器时,触发人的函数,Shoot()。这个触发仅有一次。
3.当检测到人着陆到平台上,触发人的函数Land()。
4.当检测到人离开平台,触发人的函数FallOff()
DONE

子任务:完成人的Shoot、Land、Falloff函数
Shoot:
1.给予刚体一个固定的朝向右上角的速度,使其刚好能抛到平台上。
2.从Shoot到Walk,大约有1~2秒时间,不能让人脸着地前进吧。所以,需要在1秒内修正人的旋转,修正完后锁定刚体Z旋转。
Good Job!效果不错
DONE

Land:
1.此时人脚着地处于平台上,让人按照固定的速度一直朝着右边前进即可
比较简单
DONE

FallOff:
由于胶囊碰撞体的特殊性,下落时会触发多次FallOff,这是不行的。同时,人在边缘直接坠落非常难看,所以这里加上一段小跳跃。
1.当触发FallOff,给刚体一个右上的速度,模拟跳跃
Good Job,效果很不错
DONE

子任务:完成马接住人的判定和控制系统
1.在马背安置触发器,当检测到玩家进入,触发人的Recover函数
2.完成人的Recover函数,使人在短时间内回到指定的位置和旋转,恢复的最后把人的状态恢复到Normal
DONE

子任务:开发,人直接掉落到地面的死亡逻辑
1.直接掉落到地面后,触发GameOver

子任务:测试
1.发现人Recover功能的问题,Recover时的目标点是固定的,但是恢复的过程中马会动,所以这种办法从根本上就有问题。再多写一个动态的追踪比较麻烦,姑且让人恢复得快一点,这样就看不出来什么破绽。
已解决
2.人有时发射不到人马分离的平台上,应该是发射速度太小导致的,已调大。
3.我认为现在创烂障碍物的速度门槛太低了,已适当加快
4.人马分离障碍会突然出现而不是从屏幕右侧进入出现,这是人马分离障碍体积过大导致的。目前只能适当右移障碍物生成点解决。
5.发现Bug,本来可创烂障碍物的爆破力度会随着马的速度而改变,但现在经常响应不到。
已修复。

暂未发现更多问题。

至此,人马分离障碍物的逻辑基本完成

*修复Bug
1.原先马在触发器也会被阻挡,这是因为马脚供力的算法的错误导致的,要从根本解决需要修改复杂的算法,所以这里使用Trick,将触发器的物理层转移到忽略射线检测层,解决了这个问题。
DONE
2.发现Bug,本来可创烂障碍物的爆破力度会随着马的速度而改变,但现在经常响应不到。原来监听的是马的速度,由于整个数学模型的特殊性,马本体的速度变化极其诡异,所以易导致监听错误。应采用新的监听方式,不再监听马本体速度,而是监听用户过去若干时间内的输入变化,由此来决定爆破力度。
不是!我的代码没问题,是这个插件的作者的代码的问题,非常啥卵。已通过修改插件作者源码解决问题。
DONE
2022-08-19 14:23:35 +08:00

317 lines
8.6 KiB
Plaintext

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4733579342419572514
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4733579342419572525}
- component: {fileID: 4733579342419572520}
- component: {fileID: 4733579342419572521}
- component: {fileID: 4733579342419572526}
- component: {fileID: 4733579342419572527}
- component: {fileID: 4733579342419572524}
m_Layer: 0
m_Name: Obstacle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4733579342419572525
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4733579342419572514}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -7.94, y: -0.6514666, z: 0.27998134}
m_LocalScale: {x: 4.75, y: 5, z: 2}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4733579343245745149}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &4733579342419572520
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4733579342419572514}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
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: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 104635819
m_SortingLayer: 3
m_SortingOrder: 0
m_Sprite: {fileID: 21300000, guid: 16dc54242d399cd4f85f6782c0b23483, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 3.28, y: 3.28}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!50 &4733579342419572521
Rigidbody2D:
serializedVersion: 4
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4733579342419572514}
m_BodyType: 1
m_Simulated: 1
m_UseFullKinematicContacts: 0
m_UseAutoMass: 0
m_Mass: 1
m_LinearDrag: 0
m_AngularDrag: 0.05
m_GravityScale: 5
m_Material: {fileID: 0}
m_Interpolate: 0
m_SleepingMode: 1
m_CollisionDetection: 0
m_Constraints: 0
--- !u!114 &4733579342419572526
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4733579342419572514}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 75953d6b31f574644be1238b08e89b8a, type: 3}
m_Name:
m_EditorClassIdentifier:
allowRuntimeFragmentation: 1
extraPoints: 10
subshatterSteps: 0
fragmentLayer: Fragment
sortingLayerName: Default
orderInLayer: 0
shatterType: 1
fragments: []
--- !u!60 &4733579342419572527
PolygonCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4733579342419572514}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IsTrigger: 0
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 0, y: 0}
m_SpriteTilingProperty:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0.5, y: 0.5}
oldSize: {x: 1.79, y: 3.59}
newSize: {x: 3.28, y: 3.28}
adaptiveTilingThreshold: 0.5
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
m_Points:
m_Paths:
- - {x: -0.8807492, y: 1.789232}
- {x: -0.828387, y: -1.7395868}
- {x: 0.88074934, y: -1.7267774}
- {x: 0.9069304, y: 1.7146161}
--- !u!114 &4733579342419572524
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4733579342419572514}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7af6dd9712bb07c43a7a851e83d317f7, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &4733579343245745137
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4733579343245745149}
- component: {fileID: 4733579343245745138}
- component: {fileID: 4733579343245745139}
- component: {fileID: 4733579343245745136}
m_Layer: 0
m_Name: BreakableObstacle
m_TagString: Obstacle
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4733579343245745149
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4733579343245745137}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 10.04, y: 3.3, z: -0.48084965}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4733579343445719926}
- {fileID: 4733579342419572525}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4733579343245745138
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4733579343245745137}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0670d29f3d3c3834e959894d59615b48, type: 3}
m_Name:
m_EditorClassIdentifier:
breakSpeedThreshold: 18
breakForce: 1000
--- !u!61 &4733579343245745139
BoxCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4733579343245745137}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IsTrigger: 1
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: -9.71, 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
serializedVersion: 2
m_Size: {x: 6.55, y: 18.57}
m_EdgeRadius: 0
--- !u!50 &4733579343245745136
Rigidbody2D:
serializedVersion: 4
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4733579343245745137}
m_BodyType: 1
m_Simulated: 1
m_UseFullKinematicContacts: 0
m_UseAutoMass: 0
m_Mass: 1
m_LinearDrag: 0
m_AngularDrag: 0.05
m_GravityScale: 1
m_Material: {fileID: 0}
m_Interpolate: 0
m_SleepingMode: 1
m_CollisionDetection: 0
m_Constraints: 0
--- !u!1 &4733579343445719927
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4733579343445719926}
- component: {fileID: 4733579343445719921}
m_Layer: 0
m_Name: Force
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4733579343445719926
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4733579343445719927}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -26.3, y: 10.2, z: 0.27998134}
m_LocalScale: {x: 2, y: 5, z: 2}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4733579343245745149}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &4733579343445719921
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4733579343445719927}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b57070c18171a2448bd93ce4df9e8ff5, type: 3}
m_Name:
m_EditorClassIdentifier:
force: 1000
radius: 30
upliftModifer: 0.29