Exemplo n.º 1
0
    protected override void onUpdate()
    {
        //当前目标不存在
        bool isHave = EntityMgr.isHaveEntity(data.goalUID);

        if (!isHave)
        {
            onFinish();
            return;
        }
        CEntity goal = EntityMgr.getEntity(data.goalUID);

        disVec = goal.CacheTrans.position + Vector3.up - CacheTrans.position;
        dir    = disVec.normalized;
        CacheTrans.LookAt(goal.CacheTrans.position + Vector3.up);
        Debug.DrawRay(CacheTrans.position, dir, Color.red, 0.5f);
        if (Physics.Raycast(CacheTrans.position, dir, out info, speed))
        {
            //碰撞到目标
            CEntity hitEntity = info.collider.GetComponent <CEntity>();
            if (hitEntity != null)
            {
                if (hitEntity.UID == goal.UID)
                {
                    CacheTrans.position = goal.CacheTrans.position;
                    if (data.callBack != null)
                    {
                        data.callBack.Invoke(data.cfgId, data.goalUID, CacheTrans.position);
                    }
                    onFinish();
                }
            }
        }
        else
        {
            CacheTrans.position += dir * speed;
        }
    }
Exemplo n.º 2
0
    protected override void onUpdate()
    {
        //当前目标不存在
        bool isHave = EntityMgr.isHaveEntity(data.goalUID);

        if (!isHave)
        {
            onFinish();
            return;
        }
        //当前目标存在 每帧计算距离

        /*
         * CEntity goal = EntityMgr.getEntity(data.goalUID);
         * disVec = goal.CacheTrans.position - CacheTrans.position;
         * dir = disVec.normalized;
         * dis = disVec.magnitude;
         * CacheTrans.LookAt(goal.CacheTrans);
         * Debug.DrawRay(CacheTrans.position, dir, Color.red, 0.5f);
         * if (dis <= reachDis)
         * {
         *    if (data.callBack != null)
         *    {
         *        data.callBack.Invoke(data.cfgId, data.goalUID, CacheTrans.position);
         *    }
         *    onFinish();
         * }
         * CacheTrans.position += dir* speed;
         */

        //每帧射线检测 有效率问题吗?

        /*
         * CEntity goal = EntityMgr.getEntity(data.goalUID);
         * disVec = goal.CacheTrans.position+Vector3.up - CacheTrans.position;
         * dir = disVec.normalized;
         * CacheTrans.LookAt(goal.CacheTrans.position + Vector3.up);
         * Debug.DrawRay(CacheTrans.position, dir, Color.red, 0.5f);
         * if (Physics.Raycast(CacheTrans.position, dir, out info,speed))
         * {
         *  //碰撞到目标
         *  CEntity hitEntity = info.collider.GetComponent<CEntity>();
         *  if (hitEntity != null) {
         *      if (hitEntity.UID == goal.UID)
         *      {
         *          CacheTrans.position = goal.CacheTrans.position;
         *          if (data.callBack != null)
         *          {
         *              data.callBack.Invoke(data.cfgId, data.goalUID, CacheTrans.position);
         *          }
         *          onFinish();
         *      }
         *      else {
         *          onFinish();
         *      }
         *  }
         * }
         * else {
         *  CacheTrans.position += dir * speed;
         * }
         */
        CEntity goal = EntityMgr.getEntity(data.goalUID);

        disVec = goal.CacheTrans.position + Vector3.up - CacheTrans.position + Vector3.up;
        dir    = disVec.normalized;
        CacheTrans.LookAt(goal.CacheTrans.position + Vector3.up);
        Debug.DrawRay(CacheTrans.position, dir, Color.red, 0.5f);
        if (Physics.Raycast(CacheTrans.position, dir, out info, speed))
        {
            //碰撞到目标
            CEntity hitEntity = info.collider.GetComponent <CEntity>();
            if (hitEntity != null)
            {
                if (hitEntity.UID == goal.UID)
                {
                    CacheTrans.position = goal.CacheTrans.position;
                    if (data.callBack != null)
                    {
                        data.callBack.Invoke(data.cfgId, data.goalUID, CacheTrans.position);
                    }
                    onFinish();
                }
                else
                {
                    onFinish();
                }
            }
        }
        else
        {
            CacheTrans.position += dir * speed;
        }
    }