任务:搭建基本的系统

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:
Roman 2021-11-24 23:23:01 +08:00
parent 3ca9f6d7ea
commit f7e92a473d
6 changed files with 253 additions and 5 deletions

View File

@ -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
}
]

View File

@ -181,12 +181,12 @@
"devices": [
{
"devicePath": "<Gamepad>",
"isOptional": false,
"isOptional": true,
"isOR": false
},
{
"devicePath": "<Keyboard>",
"isOptional": true,
"isOptional": false,
"isOR": false
}
]

View File

@ -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
View 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事件
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d45cf1348b8a0194f89c4dbf729c14df
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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);
}
}
}
}