예제 #1
0
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (gunState == State.Empty) //눌렀는데 empty거나 장전 누르면
            {
                print("장전시도");
                checkReload();
            }

            if (gunState == State.Ready)
            {
                magAmmo--;
                if (magAmmo <= 0)
                {
                    gunState = State.Empty;
                    print("총알 다씀!");
                }


                //레이를 생성한 후 발사될 위치와 진행 방향을 설정한다.
                Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);

                //레이가 부딪힌 대상의 정보를 저장할 변수를 생성한다.
                RaycastHit hitInfo = new RaycastHit();

                if (Physics.Raycast(ray, out hitInfo))
                {
                    // 만일 레이에 부딪힌 대상의 레이어가 "Enemy"라면 데미지 함수를 실행한다. **7주차 추가 부분
                    if (hitInfo.transform.gameObject.layer == LayerMask.NameToLayer("Enemy"))
                    {
                        EFSM eFSM = hitInfo.transform.GetComponent <EFSM>();
                        eFSM.HitEnemy(weaponPower); //weaponPower만큼 Enemy의 체력 hp가 감소 ->ESFM HitEnemy함수 hitpower매개변수로 들어감
                    }
                    // 그렇지 않다면, 레이에 부딪힌 지점에 피격 이펙트를 플레이한다. (즉 적이 아닐때)
                    else
                    {
                        // 피격 이펙트의 위치를 레이가 부딪힌 지점으로 이동시킨다.
                        bulletEffect.transform.position = hitInfo.point;

                        // 피격 이펙트의 forward 방향을 레이가 부딪힌 지점의 법선 벡터와 일치시킨다.
                        bulletEffect.transform.forward = hitInfo.normal;

                        // 피격 이펙트를 플레이한다.
                        ps.Play();
                    }
                }
            }
        }

        if (Input.GetKeyDown(KeyCode.R))
        {
            checkReload();
        }
    }
예제 #2
0
    void Update()
    {
        //마우스 오른쪽 버튼을 누르면 시선이 바라보는 방향으로 수류탄을 던지고 싶다.

        //.1 마우스 오른쪽 버튼을 입력받는다.
        if (Input.GetMouseButtonDown(1))
        {
            GameObject bomb = Instantiate(bombFactory);
            bomb.transform.position = firePosition.transform.position;

            //수류탄 오브젝트의 Rigidboby컴포넌트를 가져온다.
            Rigidbody rb = bomb.GetComponent <Rigidbody>();

            //카메라의 정면방향으로 수류탄에 물리적인 힘을 가한다.
            rb.AddForce(Camera.main.transform.forward * throwPower, ForceMode.Impulse); //던지는 방향, 순간적인 힘을 가하여 던지겠다.
        }

        //마우스 왼쪽 버튼을 누르면 시선이 바라보는 방향으로 총을 발사하고 싶다.
        //마우스 왼쪽 버튼을 입력받는다.

        if (Input.GetMouseButtonDown(0))
        {
            //레이를 생성한 후 발사될 위치와 진행 방향을 설정한다.
            Ray ray = new Ray(Camera.main.transform.position, Camera.main.transform.forward);

            //레이가 부딪힌 대상의 정보를 저장할 변수를 생성한다.
            RaycastHit hitInfo = new RaycastHit();

            if (Physics.Raycast(ray, out hitInfo))
            {
                // 만일 레이에 부딪힌 대상의 레이어가 "Enemy"라면 데미지 함수를 실행한다. **7주차 추가 부분
                if (hitInfo.transform.gameObject.layer == LayerMask.NameToLayer("Enemy"))
                {
                    EFSM eFSM = hitInfo.transform.GetComponent <EFSM>();
                    eFSM.HitEnemy(weaponPower); //weaponPower만큼 Enemy의 체력 hp가 감소 ->ESFM HitEnemy함수 hitpower매개변수로 들어감
                }
                // 그렇지 않다면, 레이에 부딪힌 지점에 피격 이펙트를 플레이한다. (즉 적이 아닐때)
                else
                {
                    // 피격 이펙트의 위치를 레이가 부딪힌 지점으로 이동시킨다.
                    bulletEffect.transform.position = hitInfo.point;

                    // 피격 이펙트의 forward 방향을 레이가 부딪힌 지점의 법선 벡터와 일치시킨다.
                    bulletEffect.transform.forward = hitInfo.normal;

                    // 피격 이펙트를 플레이한다.
                    ps.Play();
                }
            }
        }
    }