任务:搭建基本的系统

1.完成召唤炸弹攻击逻辑
(1.参照其他两种攻击,延时循环3次
(2.在起点和终点之间的x范围内的随机位置生成炸弹,y轴绑定起点

(*.修改炸弹类,使其右变量控制落地后的爆炸时间,默认为0,初始化时可以更改。新增判断,如果落地,执行延时而非直接爆炸

(3.初始化炸弹,给其向下微微偏左的初速度,这种炸弹会滚动,修改其落地后爆炸的时间

2.完成反击炸弹逻辑
(1.给玩家添加子物体:反击侦察器,内含圆形触发器
(2.给MyPlayer添加工具类,反击侦察器,初始化的时候找到该子物体并赋予其组件
(3.编写反击侦察器逻辑,内含一对触发器逻辑,当有炸弹进入反击范围,记录可反击炸弹,离开则清空
(4.编写玩家反击判定。当按下攻击键,额外检查反击侦察器是否有炸弹可以反击,如果有,再检查面部朝向,只有面朝左侧,也就是面朝木马,才能则执行反击

3.完成木马的被打断逻辑
(1.被炸事件触发时修改自身标记被打断
(2.若处于被打断状态,break出喷射循环,呼叫攻击结束事件

4.修复炸弹捕捉攻击对象错误Bug

5.木马创到人的时候,让人受伤

6.添加一些手柄震动
(1.当成功反弹炸弹,剧烈震动手柄

至此,伊斯兰Boss关的逻辑基本开发完毕

7.搭建基督Boss关测试场景
(1.加入一些必要元素
This commit is contained in:
Roman 2021-12-14 01:33:24 +08:00
parent 6253bd856c
commit 9b4871b128
21 changed files with 2512 additions and 108 deletions

View File

@ -47,6 +47,9 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 328d1361227b9fd40b3fc2f5b1ad2fe0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_rigidbody: {fileID: 0}
landBoomTime: 0
isThisCanBeReturned: 0
--- !u!212 &7438740031623559662
SpriteRenderer:
m_ObjectHideFlags: 0
@ -122,7 +125,7 @@ BoxCollider2D:
adaptiveTiling: 0
m_AutoTiling: 0
serializedVersion: 2
m_Size: {x: 1, y: 1}
m_Size: {x: 2, y: 2}
m_EdgeRadius: 0
--- !u!50 &7438740031623559635
Rigidbody2D:
@ -154,7 +157,7 @@ CircleCollider2D:
m_GameObject: {fileID: 7438740031623559657}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_Material: {fileID: 6200000, guid: 7967053ffea0e0649bb2523acdc1e437, type: 2}
m_IsTrigger: 0
m_UsedByEffector: 0
m_UsedByComposite: 0

View File

@ -153,6 +153,66 @@ Transform:
m_Father: {fileID: 1208549691}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &375543751
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 375543752}
m_Layer: 7
m_Name: "\u53CD\u5F39\u70B8\u5F39\u53D7\u51FB\u70B9"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &375543752
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 375543751}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.13, y: 0.05, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1208549691}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &423140836
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 423140837}
m_Layer: 7
m_Name: "\u53EC\u5524\u70B8\u5F39\u653B\u51FB\u6700\u5DE6\u70B9"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &423140837
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 423140836}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 7.97, y: 5.22, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1208549691}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &482671851
GameObject:
m_ObjectHideFlags: 0
@ -446,6 +506,7 @@ Transform:
- {fileID: 680373052}
- {fileID: 1324056969}
- {fileID: 1404886351}
- {fileID: 1855651278}
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -562,6 +623,36 @@ Transform:
m_Father: {fileID: 482671858}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &759899979
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 759899980}
m_Layer: 7
m_Name: "\u53EC\u5524\u70B8\u5F39\u653B\u51FB\u6700\u53F3\u70B9"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &759899980
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 759899979}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 15.36, y: 5.36, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1208549691}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1068582822
GameObject:
m_ObjectHideFlags: 0
@ -1197,6 +1288,9 @@ Transform:
- {fileID: 1266729902}
- {fileID: 1367477611}
- {fileID: 230279236}
- {fileID: 423140837}
- {fileID: 759899980}
- {fileID: 375543752}
m_Father: {fileID: 0}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -1219,15 +1313,17 @@ MonoBehaviour:
canBeHit: 1
state: 0
HPLeft: 0
timeBetweenAttacks: 0
timeBetweenAttacks: 3
yiSiLan: {fileID: 4312721376048571783, guid: fbfdd225dbb0dfe4ca6246532e0ec9cb, type: 3}
yiSiLanMinTime: 3
yiSiLanMaxTime: 6
yiSiLanMinTime: 1
yiSiLanMaxTime: 3
sprayBoomer: {fileID: 7438740031623559657, guid: 6f425457493cafb409f540876c51609c, type: 3}
sprayBoomerTime: 1
sprayBoomerDir: {x: 1.5, y: 1}
sprayBoomerMultiple: 1.5
sprayBoomerDir: {x: 2, y: 1.5}
sprayBoomerMultiple: 1.3
callBoomStartVelocity: {x: -5, y: -20}
isMove: 0
wasInterupt: 0
--- !u!61 &1208549693
BoxCollider2D:
m_ObjectHideFlags: 0
@ -2128,6 +2224,105 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1855651277
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1855651278}
- component: {fileID: 1855651280}
- component: {fileID: 1855651279}
m_Layer: 3
m_Name: "\u53CD\u51FB\u4FA6\u5BDF\u5668"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1855651278
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1855651277}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -0.119, y: 0.136, z: 0}
m_LocalScale: {x: 3.0667708, y: 3.0667708, z: 3.0667708}
m_Children: []
m_Father: {fileID: 482671858}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &1855651279
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1855651277}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
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: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_Sprite: {fileID: 21300000, guid: 6f62c397230d6d845b87a8e53d67c0e1, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 0.5882353}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 1, y: 1}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!58 &1855651280
CircleCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1855651277}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IsTrigger: 1
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 0, y: 0}
serializedVersion: 2
m_Radius: 0.5
--- !u!1 &1859446324
GameObject:
m_ObjectHideFlags: 0
@ -2361,64 +2556,3 @@ MonoBehaviour:
optionalRotationMode: 0
optionalScrambleMode: 0
optionalString:
--- !u!1001 &7438740032665260723
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 7438740031623559657, guid: 6f425457493cafb409f540876c51609c, type: 3}
propertyPath: m_Name
value: "\u70B8\u5F39"
objectReference: {fileID: 0}
- target: {fileID: 7438740031623559657, guid: 6f425457493cafb409f540876c51609c, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7438740031623559663, guid: 6f425457493cafb409f540876c51609c, type: 3}
propertyPath: m_RootOrder
value: 7
objectReference: {fileID: 0}
- target: {fileID: 7438740031623559663, guid: 6f425457493cafb409f540876c51609c, type: 3}
propertyPath: m_LocalPosition.x
value: 4.98
objectReference: {fileID: 0}
- target: {fileID: 7438740031623559663, guid: 6f425457493cafb409f540876c51609c, type: 3}
propertyPath: m_LocalPosition.y
value: -1.46
objectReference: {fileID: 0}
- target: {fileID: 7438740031623559663, guid: 6f425457493cafb409f540876c51609c, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7438740031623559663, guid: 6f425457493cafb409f540876c51609c, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7438740031623559663, guid: 6f425457493cafb409f540876c51609c, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7438740031623559663, guid: 6f425457493cafb409f540876c51609c, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7438740031623559663, guid: 6f425457493cafb409f540876c51609c, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7438740031623559663, guid: 6f425457493cafb409f540876c51609c, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7438740031623559663, guid: 6f425457493cafb409f540876c51609c, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7438740031623559663, guid: 6f425457493cafb409f540876c51609c, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6f425457493cafb409f540876c51609c, type: 3}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5a332f4b72262f844bc23f7d9e03d90d
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -7,7 +7,7 @@ using Sirenix.OdinInspector;
/// <summary>
/// 炸弹类,控制木马喷射和召唤的炸弹
/// </summary>
public class Bommer : MonoBehaviour
public class Boomer : MonoBehaviour
{
// _____ _ _ _
// | __ \ | | | (_)
@ -23,11 +23,19 @@ public class Bommer : MonoBehaviour
/// <summary>
/// 被炸的时候触发
/// </summary>
void BeBoomed(float atk, int dir);
void BeBoomed(float atk, int dir, Boomer boomer);
Transform ObjTransform();
}
[HideInInspector]
public Rigidbody2D m_rigidbody;
/// <summary>
/// 落地后的爆炸时间
/// </summary>
public float landBoomTime = 0;
/// <summary>
/// 这个炸弹能否被反击呢?默认无法反击,如果要反击,请在初始化的时候修改此属性
/// </summary>
public bool isThisCanBeReturned = false;
// _____ _ _
// | __ \ (_) | |
@ -40,7 +48,12 @@ public class Bommer : MonoBehaviour
/// <summary>
/// 爆炸会受影响的东西,只能是伊斯兰、木马或者玩家
/// </summary>
[ListDrawerSettings][ShowInInspector]
private List<I_CanBeBoomedObj> boomingObj;
/// <summary>
/// 记录正在播放的返回动画,爆炸的时候kill一下,否则会触发Tween插件的安全模式错误log
/// </summary>
private Tweener returnTweener;
// _____ _ _ ____ _
// / ____| | | | _ \ | |
@ -76,13 +89,36 @@ public class Bommer : MonoBehaviour
foreach(I_CanBeBoomedObj obj in boomingObj){
//执行被炸事件
obj.BeBoomed(owner.ATK,
(obj.ObjTransform().position.x - transform.position.x > 0) ? 1 : 1
(obj.ObjTransform().position.x - transform.position.x > 0) ? 1 : 1,
this
);
}
returnTweener.Kill();
//销毁自己
Destroy(gameObject);
}
// ______ _
// | ____| | |
// | |____ _____ _ __ | |_
// | __\ \ / / _ \ '_ \| __|
// | |___\ V / __/ | | | |_
// |______\_/ \___|_| |_|\__|
/// <summary>
/// 被反击的时候触发
/// </summary>
public void Vengeance(){
//修改自身物理层使其不会与玩家相撞
gameObject.layer = 10;
//编写Tween动画使其飞向木马受击点
Tweener tweener = transform.DOMove(
owner.transform.Find("反弹炸弹受击点").position,
0.2f,false
);
returnTweener = tweener;
}
// _____ _ _ _ _
// / ____| | | (_) (_)
// | | ___ | | |_ ___ _ ___ _ __
@ -92,13 +128,19 @@ public class Bommer : MonoBehaviour
//当与物体碰上
void OnCollisionEnter2D(Collision2D other){
//直接爆炸,不管是什么
Boom();
//如果创到地面,执行爆炸延时
if(other.transform.tag == "地面"){
Invoke("Boom",landBoomTime);
}
else{
//否则直接炸
Boom();
}
}
//当有东西进入爆炸范围
void OnTriggerEnter2D(Collider2D other){
//看看是不是可被炸对象(对象需要实现被炸接口)
if(other.TryGetComponent<I_CanBeBoomedObj>(out I_CanBeBoomedObj obj)){
if(other.TryGetComponent<I_CanBeBoomedObj>(out I_CanBeBoomedObj obj) && !other.isTrigger){
//是则将其加入被炸对象列表
boomingObj.Add(obj);
}

View File

@ -8,7 +8,7 @@ using Sirenix.OdinInspector;
/// <summary>
/// 玩家类,控制玩家相关的东西
/// </summary>
public class MyPlayer : MonoBehaviour, Bommer.I_CanBeBoomedObj
public class MyPlayer : MonoBehaviour, Boomer.I_CanBeBoomedObj
{
// _____ _ _ _
// | __ \ | | | (_)
@ -84,6 +84,9 @@ public class MyPlayer : MonoBehaviour, Bommer.I_CanBeBoomedObj
private float hammerCDLeft = 0f;
[FoldoutGroup("CD")][Header("发射镰刀的CD还剩多长时间")][SerializeField][ReadOnly]
private float sickleCDLeft = 0f;
/// <summary>
/// 面部朝向,-1为左,1为右
/// </summary>
private int faceDir = 1;//面部朝向
private Transform sickleFirePoint;//镰刀发射点的transform
private Transform sickleClearerL;//左边的镰刀清除触发器
@ -113,6 +116,10 @@ public class MyPlayer : MonoBehaviour, Bommer.I_CanBeBoomedObj
/// </summary>
private bool isThrowing;
private VibrationManager vibrationManager;
/// <summary>
///反击侦察器组件
/// </summary>
private CounterScout counterScout;
@ -160,6 +167,7 @@ public class MyPlayer : MonoBehaviour, Bommer.I_CanBeBoomedObj
sickleClearerR.gameObject.AddComponent<SickleClearer>();
m_Animator = GetComponent<Animator>();
vibrationManager = FindObjectOfType<VibrationManager>();
counterScout = gameObject.AddComponent<CounterScout>();
//初始化生命值
HPLeft = HP;
//初始化攻击倍率字典
@ -333,6 +341,15 @@ public class MyPlayer : MonoBehaviour, Bommer.I_CanBeBoomedObj
StartCoroutine(
vibrationManager.ShakePad(0.1f,0.1f,0.2f,VibrationManager.PadShakeitem.)
);
//检查是否有可反击的炸弹
if(counterScout.catchingBoomer != null && faceDir == -1)
{
//有则执行炸弹的反击功能
counterScout.catchingBoomer.Vengeance();
//剧烈震动手柄
StartCoroutine(vibrationManager.ShakePad(0.8f,0.2f,0.2f,VibrationManager.PadShakeitem.));
}
}
}
@ -480,7 +497,7 @@ public class MyPlayer : MonoBehaviour, Bommer.I_CanBeBoomedObj
// _| |_| | | | || __/ | | || (_| | (_| __/
// |_____|_| |_|\__\___|_| |_| \__,_|\___\___|
public void BeBoomed(float atk, int dir){
public void BeBoomed(float atk, int dir, Boomer boomer){
OnBeHit(atk,dir);
}
@ -496,8 +513,6 @@ public class MyPlayer : MonoBehaviour, Bommer.I_CanBeBoomedObj
// | | (_) | (_) | | |____| | (_| \__ \__ \
// |_|\___/ \___/|_|\_____|_|\__,_|___/___/
private class SickleClearer : MonoBehaviour
{
//一个工具小插件,单独写脚本实在太浪费,所以在这里写一下。
@ -509,5 +524,33 @@ public class MyPlayer : MonoBehaviour, Bommer.I_CanBeBoomedObj
Destroy(temp.gameObject);
}
}
}
/// <summary>
/// 反击侦察器,玩家的工具类
/// </summary>
private class CounterScout : MonoBehaviour
{
/// <summary>
/// 正捕获着的炸弹
/// </summary>
public Boomer catchingBoomer;
void OnTriggerEnter2D(Collider2D other){
//如果可捕获的炸弹进入捕获范围
if(other.TryGetComponent<Boomer>(out Boomer temp) &&
temp.isThisCanBeReturned){
//则记录下这个炸弹
catchingBoomer = temp;
}
}
void OnTriggerExit2D(Collider2D other){
//如果捕获着的炸弹离开,清空记录
if(other.TryGetComponent<Boomer>(out Boomer temp) &&
temp == catchingBoomer){
catchingBoomer = null;
}
}
}
}

View File

@ -7,7 +7,7 @@ using DG.Tweening;
/// <summary>
/// 木马类
/// </summary>
public class TrojanHorse : Enemy, Bommer.I_CanBeBoomedObj
public class TrojanHorse : Enemy, Boomer.I_CanBeBoomedObj
{
// _____ _ _ _
// | __ \ | | | (_)
@ -56,6 +56,11 @@ public class TrojanHorse : Enemy, Bommer.I_CanBeBoomedObj
/// </summary>
[Header("喷射炸弹的力度倍数")][FoldoutGroup("木马")]
public float sprayBoomerMultiple;
/// <summary>
/// 召唤炸弹攻击,炸弹从天而降的初速度
/// </summary>
[Header("召唤炸弹攻击,炸弹从天而降的初速度")][FoldoutGroup("木马")]
public Vector2 callBoomStartVelocity;
// _____ _ _
// | __ \ (_) | |
@ -71,7 +76,7 @@ public class TrojanHorse : Enemy, Bommer.I_CanBeBoomedObj
/// <summary>
/// 开关,控制此时木马是否在移动
/// </summary>
[SerializeField][Header("此时木马是否在移动")][FoldoutGroup("状态")]
[SerializeField][Header("此时木马是否在移动")][FoldoutGroup("状态")][ReadOnly]
private bool isMove = false;
/// <summary>
/// 召唤伊斯兰小怪的初始位置
@ -81,6 +86,19 @@ public class TrojanHorse : Enemy, Bommer.I_CanBeBoomedObj
/// 喷射炸弹的起点
/// </summary>
private Transform sprayBoomerPosition;
/// <summary>
/// 召唤炸弹攻击的最左边
/// </summary>
private Transform callBoomerPositonLeft;
/// <summary>
/// 召唤炸弹攻击的最右边
/// </summary>
private Transform callBoomerPositonRight;
/// <summary>
/// 此时是否被打断?主要用来停止喷射攻击
/// </summary>
[Header("此时是否被打断")][SerializeField][FoldoutGroup("状态")][ReadOnly]
private bool wasInterupt = false;
// _____ _ _ ____ _
// / ____| | | | _ \ | |
@ -107,12 +125,14 @@ public class TrojanHorse : Enemy, Bommer.I_CanBeBoomedObj
//找到必须的组件和物体
callYiSiLanPosition = transform.Find("小怪召唤点");
sprayBoomerPosition = transform.Find("喷射炸弹点");
callBoomerPositonLeft = transform.Find("召唤炸弹攻击最左点");
callBoomerPositonRight = transform.Find("召唤炸弹攻击最右点");
}
/// <summary>
/// 执行一次攻击
/// </summary>
private new IEnumerator ATK(){
private IEnumerator StartAATK(){
//等待攻击间隔
yield return new WaitForSeconds(timeBetweenAttacks);
//决定行动
@ -165,19 +185,22 @@ public class TrojanHorse : Enemy, Bommer.I_CanBeBoomedObj
Debug.Log("正在使用:喷射炸弹");
//循环若干次(这里先硬编码成3次)
for(int i = 0; i < 3; i++){
if(wasInterupt) break;
//实例化预制体
Bommer bommer = Instantiate(
Boomer boomer = Instantiate(
sprayBoomer,
sprayBoomerPosition.position,
Quaternion.identity
).GetComponent<Bommer>();
).GetComponent<Boomer>();
//初始化喷出的炸弹
//给予初始的速度
yield return new WaitForEndOfFrame();
bommer.m_rigidbody.velocity = sprayBoomerDir * (i + 1) * sprayBoomerMultiple;
boomer.m_rigidbody.velocity = sprayBoomerDir * (i + 1) * sprayBoomerMultiple;
boomer.isThisCanBeReturned = true;
//等待喷射炸弹时间间隔
yield return new WaitForSeconds(sprayBoomerTime);
}
wasInterupt = false;
ATKEnd();
}
/// <summary>
@ -185,8 +208,32 @@ public class TrojanHorse : Enemy, Bommer.I_CanBeBoomedObj
/// </summary>
/// <returns></returns>
private IEnumerator CallBoomer(){
yield return new WaitForEndOfFrame();
Debug.Log("正在使用:召唤炸弹");
//循环若干次(这里先硬编码成3次)
for(int i = 0; i < 3; i++){
//实例化预制体
Boomer boomer = Instantiate(
sprayBoomer,
new Vector3(
//x取余范围内随机
Random.Range(callBoomerPositonLeft.position.x,
callBoomerPositonRight.position.x),
//yz随起点
callBoomerPositonLeft.position.y,
callBoomerPositonLeft.position.z
),
Quaternion.identity
).GetComponent<Boomer>();
//初始化喷出的炸弹
//先等待本帧结束,创建炸弹完毕
yield return new WaitForEndOfFrame();
//给予初始的速度
boomer.m_rigidbody.velocity = callBoomStartVelocity;
//修改炸弹的落地爆炸时间
boomer.landBoomTime = 1f;
//等待喷射炸弹时间间隔
yield return new WaitForSeconds(sprayBoomerTime);
}
ATKEnd();
}
/// <summary>
@ -215,7 +262,7 @@ public class TrojanHorse : Enemy, Bommer.I_CanBeBoomedObj
//修改状态为发现玩家
state = State.atk;
//开始攻击
StartCoroutine(ATK());
StartCoroutine(StartAATK());
//开始屏幕震动
FindObjectOfType<VibrationManager>().HorseShake();
//开始向右移动
@ -226,7 +273,16 @@ public class TrojanHorse : Enemy, Bommer.I_CanBeBoomedObj
/// <summary>
/// 攻击结束的时候触发,重新开始新一轮攻击
/// </summary>
public void ATKEnd(){StartCoroutine(ATK());}
public void ATKEnd(){StartCoroutine(StartAATK());}
protected override void OnTouchThePlayer(MyPlayer player){
//当创到玩家,让玩家受伤
//告诉玩家,你被攻击了
player.OnBeHit(ATK,
((transform.position.x -
player.transform.position.x)
> 0) ? 1 : -1);//通过自身位置和玩家位置的比较来返回玩家本次的受击方向
}
// _____ _ __
@ -236,8 +292,11 @@ public class TrojanHorse : Enemy, Bommer.I_CanBeBoomedObj
// _| |_| | | | || __/ | | || (_| | (_| __/
// |_____|_| |_|\__\___|_| |_| \__,_|\___\___|
public void BeBoomed(float atk, int dir){
OnBeHit(MyPlayer.AtkMethod.,dir);
public void BeBoomed(float atk, int dir, Boomer boomer){
if(boomer.isThisCanBeReturned){
OnBeHit(MyPlayer.AtkMethod.,dir);
wasInterupt = true;
}
}
public Transform ObjTransform(){return transform;}

View File

@ -29,10 +29,11 @@ public class VibrationManager : MonoBehaviour
,
,
,
,
}
public static PadShakeitem itemNow;
public PadShakeitem itemNow;
/// <summary>
/// 是否处于特洛伊Boss关
/// </summary>
@ -59,10 +60,12 @@ public class VibrationManager : MonoBehaviour
if(Gamepad.current != null){
itemNow = item;
Gamepad.current.SetMotorSpeeds(left,right);
//Debug.Log("正在开始"+item+"的震动");
yield return new WaitForSeconds(time);
//只有震动项目和震动原因相同的时候,才会触发停止震动
//用来解决震动的覆盖问题
if(itemNow == item){
//Debug.Log("正在结束"+item+"的震动");
Gamepad.current.SetMotorSpeeds(0,0);
if(inHorseStage)HorseShakePad();
}
@ -79,6 +82,6 @@ public class VibrationManager : MonoBehaviour
}
public void HorseShakePad(){
StartCoroutine(ShakePad(0.1f,0.1f,20f,PadShakeitem.));
StartCoroutine(ShakePad(0f,0.1f,20f,PadShakeitem.));
}
}

View File

@ -6,7 +6,7 @@ using Sirenix.OdinInspector;
/// <summary>
/// 伊斯兰小怪类
/// </summary>
public class YiSiLan : Enemy, Bommer.I_CanBeBoomedObj
public class YiSiLan : Enemy, Boomer.I_CanBeBoomedObj
{
// _____ _ _ _
// | __ \ | | | (_)
@ -185,7 +185,7 @@ public class YiSiLan : Enemy, Bommer.I_CanBeBoomedObj
// _| |_| | | | || __/ | | || (_| | (_| __/
// |_____|_| |_|\__\___|_| |_| \__,_|\___\___|
public void BeBoomed(float atk, int dir){
public void BeBoomed(float atk, int dir, Boomer boomer){
//需要重写
OnBeHit(MyPlayer.AtkMethod.,dir);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -0,0 +1,132 @@
fileFormatVersion: 2
guid: 2c59a1e97e327e241bd1d185f70b62fd
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
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
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 150
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
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

View File

@ -0,0 +1,96 @@
fileFormatVersion: 2
guid: 0c36abafe46027d4fb5b108dff86b9cf
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
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
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
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
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

View File

@ -0,0 +1,96 @@
fileFormatVersion: 2
guid: f29e2118302625b43827609a9bdf78ef
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
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
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
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
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,11 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!62 &6200000
PhysicsMaterial2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: "\u70B8\u5F39"
friction: 0.4
bounciness: 0.2

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7967053ffea0e0649bb2523acdc1e437
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 6200000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -145,3 +145,23 @@ C# parse time : 673ms
candidates check time : 49ms
console write time : 1ms
[api-updater (non-obsolete-error-filter)] 2021/12/13 21:53:45 : Starting D:/unity/Editor/2020.3.20f1c1/Editor/Data/Tools/ScriptUpdater/APIUpdater.NonObsoleteApiUpdaterDetector.exe
[api-updater (non-obsolete-error-filter)]
----------------------------------
jit/startup time : 761.8095ms
moved types parse time: 55ms
candidates parse time : 1ms
C# parse time : 651ms
candidates check time : 68ms
console write time : 1ms
[api-updater (non-obsolete-error-filter)] 2021/12/13 21:54:01 : Starting D:/unity/Editor/2020.3.20f1c1/Editor/Data/Tools/ScriptUpdater/APIUpdater.NonObsoleteApiUpdaterDetector.exe
[api-updater (non-obsolete-error-filter)]
----------------------------------
jit/startup time : 79.517ms
moved types parse time: 54ms
candidates parse time : 1ms
C# parse time : 221ms
candidates check time : 46ms
console write time : 0ms

View File

@ -17,7 +17,7 @@ TagManager:
- "\u602A\u7269"
- "\u5730\u9762"
- "\u7A7A\u6C14\u5899"
-
- "\u53CD\u5F39\u70B8\u5F39"
-
-
-

View File

@ -6,34 +6,34 @@ EditorUserSettings:
serializedVersion: 4
m_ConfigSettings:
RecentlyUsedScenePath-0:
value: 224247031146466b011b0b2b1e3010231f051d242530691428241220adcf3031eca71fe7f42a3a3f2d0dfd73373d0431f745584bbb4b250f1800bd2f05eb021a13d00cc00988300ace0b0ac7c80a9ff6dbdfc0f3
flags: 0
RecentlyUsedScenePath-1:
value: 224247031146467f08030525192251045933371e3b2d233e1d3b1273c7f83535f2eb33faa81e10082e07ea32343f1537bc1f0702e212
flags: 0
RecentlyUsedScenePath-2:
RecentlyUsedScenePath-1:
value: 224247031146467f08030525192251045933371e3b2d233e1d3b1273c7f83535f2eb33faa81e10082e07ea3225300832f31e0004f834280a0207fe1d5fea1e1a05dc
flags: 0
RecentlyUsedScenePath-3:
RecentlyUsedScenePath-2:
value: 224247031146467f08030525192251045933371e3b2d233e1d3b1273c7f83535f2eb33faa81e10082e07ea3225300832f31e0004f8342b0f070ff30d14fb5e061fcc0cdc
flags: 0
RecentlyUsedScenePath-4:
RecentlyUsedScenePath-3:
value: 224247031146466b011b0b2b1e301034131a112d25292824620d3207f5e53136d2f539a9c2223e31290eea2f4b1a2e0be50f0c05c60a1e035f1bf30705e6
flags: 0
RecentlyUsedScenePath-5:
RecentlyUsedScenePath-4:
value: 224247031146466b011b0b2b1e301034131a112d25292824620d3207f5e53136d2f539a9c2223e31290eea2f4b1a2e0be50f0c05d7050306101af4011fc0321202cc1bd654dd1115df00
flags: 0
RecentlyUsedScenePath-6:
RecentlyUsedScenePath-5:
value: 224247031146466b011b0b2b1e301034131a112d25292824620d3207f5e53136d2f539a9c2223e31290eea2f4b1a2e0be50f0c05d7050306101af4011fc0311707c416c61fcc5109c51008d7
flags: 0
RecentlyUsedScenePath-7:
value: 22424703114646680e0b0227036c4b150503563f22213229
RecentlyUsedScenePath-6:
value: 22424703114646680e0b0227036c6b153a021713251b32312a2c2936f1f47a2decee22f0
flags: 0
RecentlyUsedScenePath-8:
RecentlyUsedScenePath-7:
value: 22424703114646680e0b0227036c7b192c16162d1f3c2737281d1820f6ae2136ebf32f
flags: 0
RecentlyUsedScenePath-8:
value: 22424703114646680e0b0227036c4b150503563f22213229
flags: 0
RecentlyUsedScenePath-9:
value: 22424703114646680e0b0227036c6b153a021713251b32312a2c2936f1f47a2decee22f0
value: 22424703114646680e0b0227036c661925162b3e2d2f2304283a097df7ee3d2cfb
flags: 0
vcSharedLogLevel:
value: 0d5e400f0650