|
发表于 2018-1-7 12:04
分享QQ空间得奖励
我原来想用观察者模式的,但是每次相互给予伤害都要全体判断一次是否collide碰撞,而且还不能确定伤害类型和伤害算法(其实是可以,但是需要大量枚举,不现实)。然后想要单纯的碰撞判断,然后发现只能输出单纯的数值伤害,无法进行复杂的算法(例如魔法伤害被魔防挡住之类的),各位大佬是怎么设计这部分的??(给个概念也好)
萌新自学中,虚心求教。
下面是我碰撞判断的模块(未实践):
/// <summary>
/// 生命状态管理模板
/// </summary>
public class BaseHealth : MonoBehaviour
{
public struct TempHealthInfor
{
/// <summary>
/// 生命值
/// </summary>
public float HealthValue;
/// <summary>
/// 魔法值
/// </summary>
public float MagicValue;
/// <summary>
/// 走路速度
/// </summary>
public float WalkSpeed;
/// <summary>
/// 奔跑速度
/// </summary>
public float RunSpeed;
/// <summary>
/// 攻击力
/// </summary>
public float AttackValue;
/// <summary>
/// 防御力
/// </summary>
public float DefensizeValuel;
/// <summary>
/// 力量值
/// </summary>
public float PowerValue;
/// <summary>
/// 耐力值
/// </summary>
public float StaminaValue;
/// <summary>
/// 敏捷值
/// </summary>
public float agilityValue;
/// <summary>
/// 思维值
/// </summary>
public float ThoughtValue;
/// <summary>
/// 理智值(san值)
/// </summary>
public float SanValue;
}
TempHealthInfor tempHealthInfor = new TempHealthInfor();
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update () {
}
/// <summary>
/// 生命值低于0时执行的函数
/// </summary>
public virtual void Die()
{
}
/// <summary>
/// 受伤
/// </summary>
/// <param name="hurtValue">伤害量</param>
public virtual void Hurt(float hurtValue)
{
tempHealthInfor.HealthValue -= hurtValue;
if (tempHealthInfor.HealthValue<0)
{
Die();
}
}
void OnControllerColliderHit(ControllerColliderHit hit)
{
if (hit.transform.tag=="Monster")
{
hit.gameObject.GetComponent<BaseHealth>().Hurt(0);
}
}
void OnCollisionEnter(Collision col)
{
if (col.transform.tag=="Monster")
{
col.gameObject.GetComponent<BaseHealth>();
}
}
void OnCollisionStay(Collision col)
{
if (col.transform.tag == "Monster")
{
col.gameObject.GetComponent<BaseHealth>();
}
}
void OnCollisionExit(Collision col)
{
if (col.transform.tag == "Monster")
{
col.gameObject.GetComponent<BaseHealth>();
}
}
void OnTriggerEnter(Collision col)
{
if (col.transform.tag == "Monster")
{
col.gameObject.GetComponent<BaseHealth>();
}
}
void OnTriggerStay(Collision col)
{
if (col.transform.tag == "Monster")
{
col.gameObject.GetComponent<BaseHealth>();
}
}
void OnTriggerExit(Collision col)
{
if (col.transform.tag == "Monster")
{
col.gameObject.GetComponent<BaseHealth>();
}
}
}
|
上一篇: Unity流光特效有接缝下一篇: 提问大佬U3D里的粒子可以实现像条带一样的效果么..
|