查看: 389|回复: 3
[u3d] 求助关于主角和怪物相互伤害的实现方法?

13

薇星辰

0

薇积分

11

精灵币

一星会员

发表于 2018-1-7 12:04
我原来想用观察者模式的,但是每次相互给予伤害都要全体判断一次是否collide碰撞,而且还不能确定伤害类型和伤害算法(其实是可以,但是需要大量枚举,不现实)。然后想要单纯的碰撞判断,然后发现只能输出单纯的数值伤害,无法进行复杂的算法(例如魔法伤害被魔防挡住之类的),各位大佬是怎么设计这部分的??(给个概念也好)
萌新自学中,虚心求教。cgwell求助关于主角和怪物相互伤害的实现方法?3 作者:爱言和 帖子ID:52094
下面是我碰撞判断的模块(未实践):
/// <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里的粒子可以实现像条带一样的效果么..

155

薇星辰

39

薇积分

5831

精灵币

三星会员

发表于 2018-1-10 10:30
用碰撞判断挺够了,碰撞后再获取角色状态进行操作,你想怎么计算都行啊,多加几个if就好。不然高级点的搞点伤害事件,不过看你现在的水平不合适
楼层回复(0) 收起
最近半年中了图形学的毒,停不下来啊

610

薇星辰

893

薇积分

9138

精灵币

超级版主

内测小伙伴一年相伴 感谢有你CGwell游戏特效03期学员

发表于 2018-1-10 10:43
这个是程序向了吧,这里能回答你的同学估计不多了。
楼层回复(0) 收起

271

薇星辰

9

薇积分

475

精灵币

二星会员

发表于 2018-1-12 10:00
咳咳!现在特效都这样了么,要会程序。cgwell求助关于主角和怪物相互伤害的实现方法?43 作者:still成长 帖子ID:52094跟不上了,浮生若梦老师或许可以回答cgwell求助关于主角和怪物相互伤害的实现方法?26 作者:still成长 帖子ID:52094
楼层回复(0) 收起
一名路过的萌新
您需要登录后才可以回帖 登录 | 普通注册

本版积分规则 回复 诸如“sadasdasf”“撒旦撒旦撒范围为” 将被直接禁言 快捷回复内容选择:

CG薇儿热门讨论X

误删公告

近日,本站受到了持续性的广告垃圾信息轰炸,管理员已经积极删帖,但可能存在误删的情况,对此造成的不变深感歉意。...

参加讨论查看详情
快速回复 返回列表 客服中心
快速回复 返回顶部 返回列表