愤怒的小鸟siki学院案例学习类继承踩雷<四>

类继承不要忘记继承弹簧长度

punlic float maxDis = 2;改为protected float maxDis = 2;//鸟距离树最大距离

类继承时识别不到鼠标按下Input.GetMouseButtonDown(0)在这里插入图片描述

Input.GetMouseButtonDown(0)应该放到 base.ShowSkill();前面,
因为类继承小鸟里的Update()函数会刷新按下鼠标返回的true,使得无法检测到

类继承OnCollisionEnter碰撞检测不到

小细节
改private void OnCollisionEnter(Collision collision)为private void OnCollisionEnter2D(Collision2D collision)
因为很多情况我们在工程里用的是Rigidbody2D
Rigidbody2D调用刚体时同理可试
另外触发检测和碰撞检测同时用可能会出错,这个我还没解决

刚体2D和刚体一点都不一样!!!

我抄了一个冲击波的代码:
https://blog.csdn.net/qq_37254525/article/details/105565245
但是他调用的刚体是这个Rigidbody rigidbody = blocks[i].gameObject.GetComponent();
我在工程里挂的是Rigidbody2D,我用了好多种办法和爆炸方案都绕不开Rigidbody,最后才受上面第二点启发,觉得这两可能不是一个东西!
在这里插入图片描述

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "Enemy")
        {
            blocks.Add(collision.gameObject.GetComponent<pig>());
        }
    }
//触发检测


public override void ShowSkill()//类继承
    {
        if (Input.GetMouseButtonDown(0))
        {
            base.ShowSkill();
            if (blocks.Count > 0 && blocks != null)
            {
                for (int i = 0; i < blocks.Count; i++)
                {
                    GameObject tObject;
                    tObject = blocks[i].gameObject;
                    print(blocks[i].gameObject.name);
                    Rigidbody2D rigidbody = blocks[i].gameObject.GetComponent<Rigidbody2D>();
                    if (rigidbody != null)
                    {
                        print("yyy");
                        Vector3 offset = Vector3.up * 7f;
                        //得到一个方向向量,用于力的施加
                        Vector3 direction = (tObject.transform.position - (gameObject.transform.position - offset)).normalized;
                        //自定义数值multiplier 根据物体质量rigidbody.mass,伤害大小damageStrength,表示质量越大施加的力相应要大些
                        int damageStrength = 300;
                        float multiplier = rigidbody.mass * damageStrength;
                        //方向力
                        Vector3 force = direction * multiplier;
                        rigidbody.AddForce(force);

                    }
                }
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值