任务:搭建基本的系统
1.编写敌人基类,具有一些基本属性,往后重复性不是特别大,决定小怪和Boss均继承此类,其余代码写在具体类中。 (1.具有如下属性: HP HPLeft ATK Speed Coin Enmu State(wander\seek\atk\dead) (2.具有如下事件 OnDead(死亡的时候触发) OnTouchThePlayer(给予怪物本体碰撞体,当玩家触碰到怪物触发) OnBeHit(Enmu攻击方式)(当有东西触碰到怪物本体,检测触碰的是什么,然后返回攻击方式给该事件) OnFindThePlayer(给予怪物一个触发器,当玩家进入该触发器,怪物进入seek状态) 🐎🐎🐎
This commit is contained in:
parent
3ca9f6d7ea
commit
f7e92a473d
@ -194,12 +194,12 @@ public class @Player : IInputActionCollection, IDisposable
|
||||
""devices"": [
|
||||
{
|
||||
""devicePath"": ""<Gamepad>"",
|
||||
""isOptional"": false,
|
||||
""isOptional"": true,
|
||||
""isOR"": false
|
||||
},
|
||||
{
|
||||
""devicePath"": ""<Keyboard>"",
|
||||
""isOptional"": true,
|
||||
""isOptional"": false,
|
||||
""isOR"": false
|
||||
}
|
||||
]
|
||||
|
@ -181,12 +181,12 @@
|
||||
"devices": [
|
||||
{
|
||||
"devicePath": "<Gamepad>",
|
||||
"isOptional": false,
|
||||
"isOptional": true,
|
||||
"isOR": false
|
||||
},
|
||||
{
|
||||
"devicePath": "<Keyboard>",
|
||||
"isOptional": true,
|
||||
"isOptional": false,
|
||||
"isOR": false
|
||||
}
|
||||
]
|
||||
|
@ -960,6 +960,107 @@ Transform:
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1563287656
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1563287659}
|
||||
- component: {fileID: 1563287658}
|
||||
- component: {fileID: 1563287657}
|
||||
m_Layer: 0
|
||||
m_Name: "\u5C0F\u602A"
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &1563287657
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1563287656}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d45cf1348b8a0194f89c4dbf729c14df, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
HP: 10
|
||||
ATK: 1
|
||||
speed: 10
|
||||
coin: 10
|
||||
HPLeft: 0
|
||||
state: 0
|
||||
--- !u!212 &1563287658
|
||||
SpriteRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1563287656}
|
||||
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: 7482667652216324306, guid: 48e93eef0688c4a259cb0eddcd8661f7, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
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!4 &1563287659
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1563287656}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0.70010865, y: 0.6895708, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 4
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1802393384
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
129
Assets/Scripts/Enemy.cs
Normal file
129
Assets/Scripts/Enemy.cs
Normal file
@ -0,0 +1,129 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Sirenix.OdinInspector;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 敌人的基类,一般怪物都继承其而来
|
||||
/// </summary>
|
||||
public class Enemy : MonoBehaviour
|
||||
{
|
||||
// _____ _ _ _
|
||||
// | __ \ | | | (_)
|
||||
// | |__) | _| |__ | |_ ___
|
||||
// | ___/ | | | '_ \| | |/ __|
|
||||
// | | | |_| | |_) | | | (__
|
||||
// |_| \__,_|_.__/|_|_|\___|
|
||||
|
||||
/// <summary>
|
||||
/// 生命值上限
|
||||
/// </summary>
|
||||
[BoxGroup("属性")][Header("生命值上限")]
|
||||
public float HP;
|
||||
|
||||
/// <summary>
|
||||
/// 攻击力
|
||||
/// </summary>
|
||||
[BoxGroup("属性")][Header("攻击力")]
|
||||
public float ATK;
|
||||
|
||||
/// <summary>
|
||||
/// 速度
|
||||
/// </summary>
|
||||
[BoxGroup("属性")][Header("速度")]
|
||||
public float speed;
|
||||
|
||||
/// <summary>
|
||||
/// 打死后掉多少金币
|
||||
/// </summary>
|
||||
[BoxGroup("属性")][Header("掉落金币数")]
|
||||
public int coin;
|
||||
|
||||
/// <summary>
|
||||
/// 怪物拥有的几种状态
|
||||
/// </summary>
|
||||
public enum State{wander,seek,atk,dead};
|
||||
|
||||
// _____ _ _
|
||||
// | __ \ (_) | |
|
||||
// | |__) | __ ___ ____ _| |_ ___
|
||||
// | ___/ '__| \ \ / / _` | __/ _ \
|
||||
// | | | | | |\ V / (_| | || __/
|
||||
// |_| |_| |_| \_/ \__,_|\__\___|
|
||||
|
||||
/// <summary>
|
||||
/// 当前生命值
|
||||
/// </summary>
|
||||
[ReadOnly][SerializeField][ProgressBar(0,10,0.15f,0.47f,0.74f)]
|
||||
protected float HPLeft;
|
||||
|
||||
/// <summary>
|
||||
/// 当前状态
|
||||
/// </summary>
|
||||
[EnumPaging][SerializeField][ReadOnly][Header("当前状态")]
|
||||
protected State state;
|
||||
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// ______ _
|
||||
// | ____| | |
|
||||
// | |____ _____ _ __ | |_
|
||||
// | __\ \ / / _ \ '_ \| __|
|
||||
// | |___\ V / __/ | | | |_
|
||||
// |______\_/ \___|_| |_|\__|
|
||||
|
||||
/// <summary>
|
||||
/// 当怪物死的时候Call这个函数
|
||||
/// </summary>
|
||||
protected void OnDead(){}
|
||||
|
||||
/// <summary>
|
||||
/// 当怪物触碰到玩家的时候Call这个
|
||||
/// </summary>
|
||||
protected void OnTouchThePlayer(){}
|
||||
|
||||
/// <summary>
|
||||
/// 当怪物被打的时候触发
|
||||
/// </summary>
|
||||
/// <param name="hitMethod">攻击方式,枚举类型,具体看MyPlayer</param>
|
||||
/// <param name="hitDir">受击方向,-1左,1右</param>
|
||||
protected void OnBeHit(MyPlayer.AtkMethod hitMethod,int hitDir){}
|
||||
|
||||
/// <summary>
|
||||
/// 当怪物发现玩家的时候Call这个
|
||||
/// </summary>
|
||||
protected void OnFindThePlayer(){}
|
||||
|
||||
|
||||
// _____ _ _ _ _
|
||||
// / ____| | | (_) (_)
|
||||
// | | ___ | | |_ ___ _ ___ _ __
|
||||
// | | / _ \| | | / __| |/ _ \| '_ \
|
||||
// | |___| (_) | | | \__ \ | (_) | | | |
|
||||
// \_____\___/|_|_|_|___/_|\___/|_| |_|
|
||||
protected void OnCollisionEnter2D(Collision2D other)//当有物体碰上
|
||||
{
|
||||
if(other.gameObject.TryGetComponent<MyPlayer>(out MyPlayer player))
|
||||
{OnTouchThePlayer();}//如果创到的是玩家,则Call事件
|
||||
}
|
||||
protected void OnTriggerEnter2D(Collider2D other)
|
||||
{
|
||||
if(other.gameObject.TryGetComponent<MyPlayer>(out MyPlayer player))
|
||||
{OnFindThePlayer();}//如果监视范围出现玩家,则Call事件
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
11
Assets/Scripts/Enemy.cs.meta
Normal file
11
Assets/Scripts/Enemy.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d45cf1348b8a0194f89c4dbf729c14df
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -5,6 +5,7 @@ using UnityEngine.InputSystem;
|
||||
using DG.Tweening;
|
||||
using Sirenix.OdinInspector;
|
||||
|
||||
|
||||
// _
|
||||
// | |
|
||||
// _ __ | | __ _ _ _ ___ _ __
|
||||
@ -14,6 +15,10 @@ using Sirenix.OdinInspector;
|
||||
// | | __/ |
|
||||
// |_| |___/
|
||||
|
||||
/// <summary>
|
||||
/// 玩家类,控制玩家相关的东西
|
||||
/// </summary>
|
||||
|
||||
[RequireComponent(typeof(Rigidbody2D))]
|
||||
public class MyPlayer : MonoBehaviour
|
||||
{
|
||||
@ -41,6 +46,7 @@ public class MyPlayer : MonoBehaviour
|
||||
[Header("镰刀发射点Transform")]
|
||||
[BoxGroup("预制体")]
|
||||
public GameObject sicklePrefab;
|
||||
public enum AtkMethod{镰刀,锤子,反弹炸弹};
|
||||
|
||||
// _____ _ _
|
||||
// | __ \ (_) | |
|
||||
@ -235,6 +241,7 @@ public class MyPlayer : MonoBehaviour
|
||||
{
|
||||
if(other.TryGetComponent<Sickle>(out Sickle temp))
|
||||
Destroy(temp.gameObject);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user