Unity导弹自动追踪算法

来源:互联网 发布:qt网络编程视频教程 编辑:程序博客网 时间:2024/05/16 12:56

网上找了很久,没有找到满意的追踪算法,要么是2D的,要么就不逼真,只好自己硬憋了1天,终于硬憋出来了,效果图:


核心代码:

private void Update()    {        // 为更加逼真,0.5秒前只前进和减速不进行追踪        if (m_uptimer < 0.5f)        {            m_uptimer += Time.deltaTime;            m_speed -= 2 * Time.deltaTime;            transform.position += transform.forward * m_speed * Time.deltaTime;        }        else        {            // 开始追踪敌人            Vector3 target = (m_Target.position - transform.position).normalized;            float a = Vector3.Angle(transform.forward, target) / m_RotSpeed;            if (a > 0.1f || a < -0.1f)                transform.forward = Vector3.Slerp(transform.forward, target, Time.deltaTime / a).normalized;            else            {                m_speed += 2 * Time.deltaTime;                transform.forward = Vector3.Slerp(transform.forward, target, 1).normalized;            }            transform.position += transform.forward * m_speed * Time.deltaTime;        }        m_currLife += Time.deltaTime;        if(m_currLife > m_MaxLife)        {            // 超过生命周期爆炸(不同与击中敌人)            Destroy(gameObject);            Destroy(Instantiate(m_Explosion, transform.position, Quaternion.identity), 1.2f);        }    }


原创粉丝点击