bool InFoV()
    {
        //GameLauncher5.GetInstance().aiPlayerList
        Debug.LogError("Athis.manGroup" + this.manGroup + " " + solideIndex);
        foreach (GameObject enemy in GameLauncher5.GetInstance().aiPlayerList)
        {
            AI3DPlayer aIPlayer = enemy.GetComponent <AI3DPlayer>();
            Debug.LogError("this.manGroup@@" + this.manGroup + " " + solideIndex + " " + aIPlayer.SOLIDER_INDEX + " " + aIPlayer.belongGroup);
            if (solideIndex != aIPlayer.SOLIDER_INDEX && aIPlayer.belongGroup != manGroup)
            {
                Debug.LogError("this.manGroup" + this.manGroup + " " + solideIndex);
                Target = enemy.transform;
                Vector3 DirToTarget = Target.position - EyePoint.position;                //取得目标的方向
                float   Angle       = Vector3.Angle(EyePoint.forward, DirToTarget);       //获取正前方和目标之间的角度

                //EyePoint.right
                if (Angle <= FieldOfView)
                {
                    return(true);
                }                               //确定敌人是否在视野中,但不考虑任何物理障碍
            }
        }
        Target = null;
        return(false);
    }
    bool ClearLineofSight()//士兵的眼睛和敌人是否存在任何物理障碍
    {
        foreach (GameObject enemy in GameLauncher5.GetInstance().aiPlayerList)
        {
            AI3DPlayer aIPlayer = enemy.GetComponent <AI3DPlayer>();



            RaycastHit Info;
//			Target = enemy.transform;
            Transform[] rect = enemy.transform.GetComponentsInChildren <Transform> ();
            foreach (Transform ts in rect)
            {
                if (ts.name == "EyePoint")
                {
                    Target = ts;
                }
            }
            if (solideIndex != aIPlayer.SOLIDER_INDEX &&
                aIPlayer.belongGroup != manGroup &&
                Physics.Raycast(EyePoint.position, (Target.position - EyePoint.position).normalized, out Info, ThisCollider.radius, layer))
            {
                Ray        ray = new Ray(EyePoint.position, (Target.position - EyePoint.position).normalized);
                RaycastHit hit;
                Physics.Raycast(ray, out hit, 1000.0f, layer);
                Debug.DrawLine(ray.origin, hit.point, Color.red);
//				Debug.DrawLine (Target.position,(EyePoint.position-Target.position).normalized,Color.red);
//				Debug.DrawLine (EyePoint.position,(Target.position-EyePoint.position).normalized,Color.yellow);
//
//				Debug.DrawLine (EyePoint.position,Target.position,Color.green);
//				if (Info.transform.CompareTag("Player") )
                if (Info.collider.transform.tag.Equals("EnemyPhy"))
                {
                    if (manGroup == AIPlayerGroup.A)
                    {
                        GameObject.Find("lab_state3").GetComponent <Text>().text = manGroup + " " + aIPlayer.SOLIDER_INDEX;
                    }
                    else
                    {
                        GameObject.Find("lab_state4").GetComponent <Text>().text = manGroup + " " + aIPlayer.SOLIDER_INDEX;
                    }

                    //Debug.LogError ("如果看到敌人");
                    Debug.LogError("如果看到敌人:" + manGroup + " " + Info.transform.gameObject.name);
                    enemyObj = Info.transform.gameObject;
                    return(true);
                }                //如果看到敌人
            }
        }
        Target = null;
        return(false);
    }
//	protected GameLauncher4 gameLauncher4;

    void Start()
    {
        //gameLauncher4 = GameLauncher4.GetInstance();
        m_transform   = this.transform;
        SOLIDER_INDEX = GameLauncher5.getManIndex();
        agent         = GetComponent <NavMeshAgent>();//导航代理
        initConfig();
        CreatePointLineList();
        muzzlePoint = GameObject.Find("MP40GermanmachineGun").GetComponent <Transform>();//枪

        animator                  = this.GetComponent <Animator>();
        ThisLineSight             = GetComponent <LineSightV4>();
        ThisLineSight.manGroup    = belongGroup;
        ThisLineSight.solideIndex = SOLIDER_INDEX;
    }
    //执行射击
    public override void Shoot()
    {
        refreshStateLabel("射击");
        if (ThisLineSight.enemyObj != null)
        {
            ammoNum--;
            refreshStateLabel("执行射击 子弹数量:" + ammoNum);
            Debug.LogError("ThisLineSight.enemyObj." + ThisLineSight.enemyObj.name + " " + this.transform.name);
            Transform realPhy = ThisLineSight.enemyObj.transform.parent.Find("EyePoint");
            transform.LookAt(realPhy);

            Debug.LogError("shoot function");
            animator.SetBool("Walk", false);
            animator.SetBool("Run", false);
            animator.Play("Shoot");
            //animator.SetBool("Shoot", true);

            //		shootTimer -= Time.deltaTime;
            //        if (shootTimer <= 0)
            //        {
            //SetAmmo(1);
            //            shootTimer = 0.9f;
            // 用一个RaycastHit对象保存射线的碰撞结果
            RaycastHit info;
            // 从枪口所在位置向摄像机面向的正前方发出一条射线
            // 该射线只与layer指定的层发生碰撞
            Transform origal = this.transform.Find("EyePoint");


            bool hit = Physics.Raycast(origal.position, (realPhy.position - origal.position).normalized * 1000, out info, 1000, layer);

            //Debug.Log(info.point);
            Debug.DrawLine(origal.position, (realPhy.position - origal.position).normalized * 1000);


            GameObject bulletObject = Instantiate(Resources.Load("Prefab/Bullet3D")) as GameObject;

            bulletObject.transform.position = origal.position;
            bulletObject.GetComponent <BulletScript3D> ().bulleGroup = belongGroup;
            bulletObject.GetComponent <BulletScript3D> ().RuningBullet(origal.position, origal.position + (realPhy.position - origal.position).normalized * 1000);
            GameLauncher5.GetInstance().buffetList.Add(bulletObject);

            if (hit)
            {
                Debug.LogError("大众敌人了-1@" + info.collider.transform.name);
                // 判断是否射中Tag为enemy的物体
                if (info.collider.transform.tag.Equals("EnemyPhy"))
                {
                    Debug.LogError("大众敌人了1");
                    AI3DPlayer aIPlayer = info.transform.GetComponent <AI3DPlayer>();
                    if (aIPlayer.belongGroup != belongGroup)
                    {
                        aIPlayer.hp = aIPlayer.hp - 20;
                        Debug.LogError("大众敌人了2");
                    }
                    // 敌人减少生命
                    //info.transform.GetComponent<Enemy>().OnDamage(1);
                    //                    Instantiate(fx, info.point, info.transform.rotation);
                }
                //            }
                // 在射中的地方释放一个粒子效果

                Debug.Log(info.point);
            }
        }

        //装填子弹
    }
示例#5
0
    // Use this for initialization
    void Start()
    {
//		initEnemy ();
        BeginGame();
        instance = this;
    }