Esempio n. 1
0
    private GameObject enemyTarget;     //적 타겟


    // Use this for initialization
    void Start()
    {
        //내직속자식중 Head 의 이름을 가진 게임오브젝트의 Transform 을 찾아온다 없으면 NULL 리턴
        this.headTransform = this.transform.FindChild("Head");

        //주의 할건 나의 직속 자식만 가져온다. 예를 들어 건을 가지고 온다면 다음과 같이 써야 한다.
        //this.transform.FindChild("Head").FindChild("Gun");
        //this.transform.FindChild("Head/Gun");

        //내총 가가지고 온다.
        guns = this.GetComponentsInChildren <Gun>();

        //만약 Target 이 설정 되어있지 않다면....
        if (this.enemyTarget == null)
        {
            //적을 찾는다.

            //씬에 배치된 게임오브젝트 중에 "PlayerPlane" 이름의 게임오브젝틀 찾고
            //없다면 Null 이 리턴된다.
            //여러게 있다면 그중하나다..... ( 무거우니 사용을 지양하자... )
            //this.enemyTarget = GameObject.Find("PlayerPlane");

            //Tag 로 적을 찾는다.
            this.enemyTarget = GameObject.FindGameObjectWithTag("PlayerPlane");


            //찾은 적을 Head 에 LookTargetTarget 에 타겟으로 전달
            //LookTargetTransform lookTraget = this.GetComponentInChildren<LookTargetTransform>();

            //해당 Transform 으로도 GetComponent 컴포넌트를 사용할수 있다.
            //이렇게 되면 해당 Transform 이물린 게임오브젝트의 컴포넌트를 가지고 오게 된다.
            LookTargetTransform lookTraget = this.headTransform.GetComponent <LookTargetTransform>();


            if (lookTraget != null)
            {
                lookTraget.target = this.enemyTarget;
            }
        }
    }
Esempio n. 2
0
    //발사 함수
    public void Fire()
    {
        //발사 준비가 안되었다면 발사안된다.
        if (IsReadyShot == false)
        {
            return;
        }

        this.IsReadyShot = false;


        //for (int i = 0; i < 12; i++)
        //{

        //명중 오차각에 의한 발사 회전 사원수 계산

        //0 ~ 360 도의 랜덤 라디안 각
        float   angleRad   = Random.Range(0.0f, 360.0f) * Mathf.Deg2Rad;
        Vector3 randVector = new Vector3(
            Mathf.Cos(angleRad),
            Mathf.Sin(angleRad),
            0.0f);

        //위의 랜덤 각에 의한 축회전 사원수를 구한다.
        Quaternion rotError = Quaternion.AngleAxis(
            Random.Range(0.0f, this.errorAngle),
            randVector);



        //특정 게임오브젝트의 클론을 만들어 씬에 배치 하고
        //새롭게 배치된 클론의 뷸렛을 newBullet 이 참조한다.
        GameObject newBullet = Instantiate(
            this.srcBuller,                    //원본 게임오브젝트 ( 보통은 프리펩을 참조시킨다 )
            this.transform.position,           //배치될 씬의 월드 위치 ( 내위치로 배치한다 )
            this.transform.rotation * rotError //배치될 씬의 회전 값사원수 (나의 회전위치와 동일하게 )
            ) as GameObject;

        //새롭게 만들어진 뷸렛에 lookTarget 컴포넌트가 있니?
        LookTargetTransform lookTarget = newBullet.GetComponent <LookTargetTransform>();

        if (lookTarget != null)
        {
            //에네미 캐논을 다 찾는다.
            GameObject[] targets = GameObject.FindGameObjectsWithTag("EnemyCannon");

            //그중에 랜덤
            int randIdx = Random.Range(0, targets.Length);      //Random.Range(0, 4 ) => 0, 1, 2, 3

            lookTarget.target = targets[randIdx];
        }


        //다음 발사까지 남은시간
        //1.0f / this.firePerSec;


        //}

        Invoke("RefireReady", 1.0f / this.firePerSec);
    }