From dcaad8044384bce4f4358522108bf9a2481ee4e0 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Oct 2020 12:44:29 +0800 Subject: *physics --- .../Scripts/AbilitySystem/Abilities/MoveAbility.cs | 4 +- .../AbilitySystem/Conditions/ConditionBase.cs | 72 ++++++++++++++++ Assets/Scripts/Physics/Box.cs | 18 ---- Assets/Scripts/Physics/Box.cs.meta | 11 --- Assets/Scripts/Physics/HitBox.cs | 12 +-- Assets/Scripts/Physics/PhysicsBall.cs | 20 +++++ Assets/Scripts/Physics/PhysicsBall.cs.meta | 11 +++ Assets/Scripts/Physics/PhysicsBody.cs | 43 ++++++++++ Assets/Scripts/Physics/PhysicsBody.cs.meta | 11 +++ Assets/Scripts/Physics/PhysicsBox.cs | 32 +++++++ Assets/Scripts/Physics/PhysicsBox.cs.meta | 11 +++ Assets/Scripts/Physics/PhysicsHelper.cs | 54 ++++++++++++ Assets/Scripts/Physics/PhysicsHelper.cs.meta | 11 +++ Assets/Scripts/Physics/PhysicsPrimitive.cs | 98 ++++++++++++++++++++++ Assets/Scripts/Physics/PhysicsPrimitive.cs.meta | 11 +++ Assets/Scripts/Physics/PhysicsUtils.cs | 18 ---- Assets/Scripts/Physics/PhysicsUtils.cs.meta | 11 --- Assets/Scripts/Physics/PhysicsWorld.cs | 36 ++++++-- Assets/Scripts/Utils/Singleton.cs | 20 +++++ Assets/Scripts/Utils/Singleton.cs.meta | 11 +++ 20 files changed, 435 insertions(+), 80 deletions(-) delete mode 100644 Assets/Scripts/Physics/Box.cs delete mode 100644 Assets/Scripts/Physics/Box.cs.meta create mode 100644 Assets/Scripts/Physics/PhysicsBall.cs create mode 100644 Assets/Scripts/Physics/PhysicsBall.cs.meta create mode 100644 Assets/Scripts/Physics/PhysicsBody.cs create mode 100644 Assets/Scripts/Physics/PhysicsBody.cs.meta create mode 100644 Assets/Scripts/Physics/PhysicsBox.cs create mode 100644 Assets/Scripts/Physics/PhysicsBox.cs.meta create mode 100644 Assets/Scripts/Physics/PhysicsHelper.cs create mode 100644 Assets/Scripts/Physics/PhysicsHelper.cs.meta create mode 100644 Assets/Scripts/Physics/PhysicsPrimitive.cs create mode 100644 Assets/Scripts/Physics/PhysicsPrimitive.cs.meta delete mode 100644 Assets/Scripts/Physics/PhysicsUtils.cs delete mode 100644 Assets/Scripts/Physics/PhysicsUtils.cs.meta create mode 100644 Assets/Scripts/Utils/Singleton.cs create mode 100644 Assets/Scripts/Utils/Singleton.cs.meta (limited to 'Assets/Scripts') diff --git a/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs index b2d7356b..a2057900 100644 --- a/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs +++ b/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs @@ -45,9 +45,9 @@ public class MoveAbility : AbilityBase public override void OnUpdate() { - foreach (var trigger in m_AbilityTriggers) + foreach (var abilityTrigger in m_AbilityTriggers) { - if (trigger.Update()) + if (abilityTrigger.Update()) break; } } diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs index c14624ad..e63bedb0 100644 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs @@ -103,3 +103,75 @@ public sealed class ConditionNone : ConditionBase } +/// +/// 两个condition都达成才会返回真 +/// +public sealed class ConditionMultiAnd : ConditionBase +{ + List m_Conditions; + + public ConditionMultiAnd(List conditions) + : base() + { + m_Conditions.AddRange(conditions); + } + + public override bool Evaluate() + { + foreach(var condition in m_Conditions) + { + if(!condition.Evaluate()) + return false; + } + return true; + } +} + +/// +/// 两个condition至少一个达成才会返回真 +/// +public sealed class ConditionMultiOr : ConditionBase +{ + List m_Conditions; + + public ConditionMultiOr(List conditions) + : base() + { + m_Conditions.AddRange(conditions); + } + + public override bool Evaluate() + { + foreach (var condition in m_Conditions) + { + if (condition.Evaluate()) + return true; + } + return false; + } +} + +/// +/// 两个condition都不达成才会返回真 +/// +public sealed class ConditionMultiNone : ConditionBase +{ + List m_Conditions; + + public ConditionMultiNone(List conditions) + : base() + { + m_Conditions.AddRange(conditions); + } + + public override bool Evaluate() + { + foreach (var condition in m_Conditions) + { + if (condition.Evaluate()) + return false; + } + return true; + } +} + diff --git a/Assets/Scripts/Physics/Box.cs b/Assets/Scripts/Physics/Box.cs deleted file mode 100644 index 1f022f51..00000000 --- a/Assets/Scripts/Physics/Box.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class NewBehaviourScript : MonoBehaviour -{ - // Start is called before the first frame update - void Start() - { - - } - - // Update is called once per frame - void Update() - { - - } -} diff --git a/Assets/Scripts/Physics/Box.cs.meta b/Assets/Scripts/Physics/Box.cs.meta deleted file mode 100644 index 528c7474..00000000 --- a/Assets/Scripts/Physics/Box.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 637138a0ba30abc498c5c9dcf6bb5d78 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Physics/HitBox.cs b/Assets/Scripts/Physics/HitBox.cs index 09e1f90a..a6337abd 100644 --- a/Assets/Scripts/Physics/HitBox.cs +++ b/Assets/Scripts/Physics/HitBox.cs @@ -2,17 +2,7 @@ using System.Collections.Generic; using UnityEngine; -public class AttackBox : MonoBehaviour +public class HitBox : PhysicsBox { - // Start is called before the first frame update - void Start() - { - - } - // Update is called once per frame - void Update() - { - - } } diff --git a/Assets/Scripts/Physics/PhysicsBall.cs b/Assets/Scripts/Physics/PhysicsBall.cs new file mode 100644 index 00000000..2a076718 --- /dev/null +++ b/Assets/Scripts/Physics/PhysicsBall.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class PhysicsBall : PhysicsPrimitive +{ + public Vector3 m_Center; + public float m_Radius; + + public void OnDrawGizmos() + { + Gizmos.DrawSphere(m_Center, m_Radius); + } + + void Start() + { + base.OnInit(); + } + +} diff --git a/Assets/Scripts/Physics/PhysicsBall.cs.meta b/Assets/Scripts/Physics/PhysicsBall.cs.meta new file mode 100644 index 00000000..39ba3e3f --- /dev/null +++ b/Assets/Scripts/Physics/PhysicsBall.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04071fd85519f204fb0d0dc080c41bae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Physics/PhysicsBody.cs b/Assets/Scripts/Physics/PhysicsBody.cs new file mode 100644 index 00000000..812b77b7 --- /dev/null +++ b/Assets/Scripts/Physics/PhysicsBody.cs @@ -0,0 +1,43 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 刚体 +/// +public sealed class PhysicsBody : MonoBehaviour +{ + + [SerializeField] + private Vector3 m_Velocity; + public Vector3 Velocity + { + get + { + return m_Velocity; + } + } + + [SerializeField] + private float m_Weight; + public float Weight + { + get + { + return m_Weight; + } + } + + [SerializeField] + private Vector3 m_Accelaration; + public Vector3 Accelaration + { + get + { + return m_Accelaration; + } + } + + + +} diff --git a/Assets/Scripts/Physics/PhysicsBody.cs.meta b/Assets/Scripts/Physics/PhysicsBody.cs.meta new file mode 100644 index 00000000..a80b9d50 --- /dev/null +++ b/Assets/Scripts/Physics/PhysicsBody.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd65b198d10c5b441b5c40b05c8f3d41 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Physics/PhysicsBox.cs b/Assets/Scripts/Physics/PhysicsBox.cs new file mode 100644 index 00000000..93f2a45f --- /dev/null +++ b/Assets/Scripts/Physics/PhysicsBox.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class PhysicsBox : PhysicsPrimitive +{ + /// + /// 中心点 + /// + public Vector3 m_Center; + + /// + /// 长宽高 + /// + public Vector3 m_Size; + + public float Long { get { return m_Size.x; } } + public float Wide { get { return m_Size.y; } } + public float Height { get { return m_Size.z; } } + + public void OnDrawGizmos() + { + Vector3 pos = m_Center + transform.position; + Gizmos.DrawCube(pos, m_Size); + } + + private void Start() + { + base.OnInit(); + } + +} diff --git a/Assets/Scripts/Physics/PhysicsBox.cs.meta b/Assets/Scripts/Physics/PhysicsBox.cs.meta new file mode 100644 index 00000000..528c7474 --- /dev/null +++ b/Assets/Scripts/Physics/PhysicsBox.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 637138a0ba30abc498c5c9dcf6bb5d78 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Physics/PhysicsHelper.cs b/Assets/Scripts/Physics/PhysicsHelper.cs new file mode 100644 index 00000000..27d04051 --- /dev/null +++ b/Assets/Scripts/Physics/PhysicsHelper.cs @@ -0,0 +1,54 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 碰撞的信息 +/// +public class PhysicsCollisionInfo +{ + +} + +public sealed class PhysicsHelper +{ + + public static bool BallvsBall(PhysicsBall ball1, PhysicsBall ball2, out PhysicsCollisionInfo info) + { + info = null; + return true; + } + + public static bool BoxvsBox(PhysicsBox box1, PhysicsBox box2, out PhysicsCollisionInfo info) + { + info = null; + return true; + } + + public static bool BallvsBox(PhysicsBall ball, PhysicsBox box, out PhysicsCollisionInfo info) + { + info = null; + return true; + } + + #region 简略版的2D检测,忽略z轴 + + public static bool BallvsBall2D(PhysicsBall ball1, PhysicsBall ball2, out PhysicsCollisionInfo info) + { + info = null; + return true; + } + + public static bool BoxvsBox2D(PhysicsBox box1, PhysicsBox box2, out PhysicsCollisionInfo info) + { + info = null; + return true; + } + + public static bool BallvsBox2D(PhysicsBall ball, PhysicsBox box, out PhysicsCollisionInfo info) + { + info = null; + return true; + } + #endregion +} diff --git a/Assets/Scripts/Physics/PhysicsHelper.cs.meta b/Assets/Scripts/Physics/PhysicsHelper.cs.meta new file mode 100644 index 00000000..6259c4db --- /dev/null +++ b/Assets/Scripts/Physics/PhysicsHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5feab7ce586a9aa468329f97b89a69a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Physics/PhysicsPrimitive.cs b/Assets/Scripts/Physics/PhysicsPrimitive.cs new file mode 100644 index 00000000..b56467b2 --- /dev/null +++ b/Assets/Scripts/Physics/PhysicsPrimitive.cs @@ -0,0 +1,98 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 物理碰撞体基类 +/// 只需要Box和Ball两种 +/// +public abstract class PhysicsPrimitive : MonoBehaviour +{ + [SerializeField] + /// + /// 这个primitive是否参与物理计算,用来快速给物体取消和恢复重力影响 + /// + protected bool m_IsActive; + public bool IsActive + { + get + { + return m_IsActive; + } + } + + /// + /// 这个primitive所属的物体 + /// + protected Transform m_Parent; + public Transform Parent + { + get + { + return m_Parent; + } + } + + /// + /// 唯一ID + /// + protected int m_ID; + public int ID + { + get + { + return m_ID; + } + } + + [SerializeField] + protected PhysicsGroup m_Group; + public PhysicsGroup Group + { + get + { + return m_Group; + } + } + + [SerializeField] + protected PhysicsTag m_Tag; + public PhysicsTag Tag + { + get + { + return m_Tag; + } + } + + + [SerializeField] + protected string m_Title; + public string Title + { + get + { + return m_Title; + } + } + + [SerializeField] + protected string m_Desc; + public string Desc + { + get + { + return m_Desc; + } + } + + /// + /// 初始化,设置一些公共数据 + /// + protected void OnInit() + { + m_ID = UIDManager.Acquire(); + m_Parent = transform; + } + +} \ No newline at end of file diff --git a/Assets/Scripts/Physics/PhysicsPrimitive.cs.meta b/Assets/Scripts/Physics/PhysicsPrimitive.cs.meta new file mode 100644 index 00000000..725a8459 --- /dev/null +++ b/Assets/Scripts/Physics/PhysicsPrimitive.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf2b8ac8c3958a449891e20d634a76de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Physics/PhysicsUtils.cs b/Assets/Scripts/Physics/PhysicsUtils.cs deleted file mode 100644 index 752e15a5..00000000 --- a/Assets/Scripts/Physics/PhysicsUtils.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class PhysicsUtils : MonoBehaviour -{ - // Start is called before the first frame update - void Start() - { - - } - - // Update is called once per frame - void Update() - { - - } -} diff --git a/Assets/Scripts/Physics/PhysicsUtils.cs.meta b/Assets/Scripts/Physics/PhysicsUtils.cs.meta deleted file mode 100644 index b47b63fc..00000000 --- a/Assets/Scripts/Physics/PhysicsUtils.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d859c78cbe7a7db4881bfd4d0274a16e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Physics/PhysicsWorld.cs b/Assets/Scripts/Physics/PhysicsWorld.cs index 4ceb4a37..085716d1 100644 --- a/Assets/Scripts/Physics/PhysicsWorld.cs +++ b/Assets/Scripts/Physics/PhysicsWorld.cs @@ -2,17 +2,35 @@ using System.Collections.Generic; using UnityEngine; -public class PhysicsWorld : MonoBehaviour +/// +/// 标记 +/// +public enum PhysicsTag { - // Start is called before the first frame update - void Start() - { - - } + Player, + Oponent, +} + +/// +/// 分类 +/// +public enum PhysicsGroup +{ + Character, + Environment, + Props, +} + +/// +/// 适用于战斗的物理系统 +/// +public class PhysicsWorld : Singleton +{ + private int m_UpdateRate = 60; - // Update is called once per frame - void Update() + public void Update() { - + } + } diff --git a/Assets/Scripts/Utils/Singleton.cs b/Assets/Scripts/Utils/Singleton.cs new file mode 100644 index 00000000..bdec31d3 --- /dev/null +++ b/Assets/Scripts/Utils/Singleton.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using System; + +public class Singleton where T : class, new() +{ + private static T _instance; + + public static T Instance + { + get + { + if (_instance == null) + _instance = Activator.CreateInstance(); + return _instance; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Utils/Singleton.cs.meta b/Assets/Scripts/Utils/Singleton.cs.meta new file mode 100644 index 00000000..81c20c5a --- /dev/null +++ b/Assets/Scripts/Utils/Singleton.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 47d828939d4273d478d2b48fee027c75 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: -- cgit v1.1-26-g67d0