예제 #1
0
    /// 아직 반사 효과를 줄 패턴이 없으므로 나중에 수정할 것

    private void OnTriggerEnter2D(Collider2D collision)
    {
        // 충돌 대상이 적 탄막인지 확인
        if (collision.CompareTag("BULLET_ENEMY"))
        {
            BulletState bulletState = collision.gameObject.GetComponent <BulletState>();
            BulletMove  bulletMove  = collision.gameObject.GetComponent <BulletMove>();

            // 대상 탄막이 반사 특성을 가지고 있는지 확인
            if (!bulletState.bulletReflectState.Equals(BulletReflectState.BULLETREFLECTSTATE_NONE) && gameObject.CompareTag("REFLECTZONE"))
            {
                // 이미 1회 이상 반사된 탄막인지 체크
                if (bulletState.reflectCount < bulletState.reflectLimit)
                {
                    // 최초 반사일 경우 반사 카운트 증가
                    bulletState.reflectCount++;
                    // 충돌한 영역이 좌우 반사 영역일 경우의 처리
                    if (gameObject.layer.Equals(LayerMask.NameToLayer("REFLECTZONE_LEFTRIGHT")))
                    {
                        bulletMove.ChangeRotateAngle(bulletMove.GetAngle() * -1);
                    }
                    // 충돌한 영역이 상하 반사 영역일 경우의 처리
                    else if ((gameObject.layer.Equals(LayerMask.NameToLayer("REFLECTZONE_TOP"))) ||
                             (gameObject.layer.Equals(LayerMask.NameToLayer("REFLECTZONE_BOTTOM")) && bulletState.bulletReflectState.Equals(BulletReflectState.BULLETREFLECTSTATE_CONTAINBOTTOM)))
                    {
                        if (bulletMove.GetAngle() >= 0.0f && bulletMove.GetAngle() <= 180.0f)
                        {
                            bulletMove.ChangeRotateAngle(180.0f - bulletMove.GetAngle());
                        }
                        else
                        {
                            bulletMove.ChangeRotateAngle(-180.0f - bulletMove.GetAngle());
                        }
                    }

                    // 탄막이 반사될 때 스프라이트 변화 및 이펙트 출력이 설정되어 있을 경우의 처리
                    if (bulletState.isSpriteChange.Equals(true))
                    {
                        // spriteRenderer.sprite = enemyFire.spriteCollection[changeSpriteNumber];
                    }
                    if (bulletState.isEffectOutput.Equals(true))
                    {
                        // StartCoroutine(enemyFire.CreateBulletFireEffect(effectSpriteNumber, scaleDownSpeed, scaleDownTime, alphaUpSpeed, transform.position));
                    }
                }
            }
        }
    }
예제 #2
0
    private IEnumerator Reaiming()
    {
        if (isSpeedDown.Equals(true))
        {
            while (true)
            {
                yield return(null);

                if (bulletState.bulletMoveSpeed <= 0.0f)
                {
                    // 효과음 재생
                    SoundManager.instance.PlaySE(soundNumber);

                    if (isPlayerAimed.Equals(true))
                    {
                        targetPosition = playerPosition.position;
                    }
                    else if (isRandomAimed.Equals(true))
                    {
                        targetPosition = new Vector3(Random.Range(-5.0f, 5.0f), Random.Range(-5.0f, 5.0f), 0.0f);
                    }
                    bulletState.bulletSpeedState  = bulletSpeedState;
                    bulletState.bulletRotateState = bulletRotateState;
                    bulletState.bulletMoveSpeed   = bulletMoveSpeed;
                    bulletState.bulletRotateSpeed = bulletRotateSpeed;
                    bulletState.bulletRotateLimit = bulletRotateLimit;
                    bulletState.bulletDestination = bulletState.GetBulletDestination(targetPosition);
                    float angle = Mathf.Atan2(bulletState.bulletDestination.y, bulletState.bulletDestination.x) * Mathf.Rad2Deg;
                    bulletMove.ChangeRotateAngle(angle - 90.0f);
                    changeCount++;
                    break;
                }
            }

            if (changeCount < repeatCount)
            {
                StartCoroutine(Reaiming());
            }
        }
        else if (isTimer.Equals(true))
        {
            yield return(new WaitForSeconds(waitTime));

            if (isPlayerAimed.Equals(true))
            {
                targetPosition = playerPosition.position;
            }
            else if (isRandomAimed.Equals(true))
            {
                targetPosition = new Vector3(Random.Range(-5.0f, 5.0f), Random.Range(-5.0f, 5.0f), 0.0f);
            }
            bulletState.bulletSpeedState  = bulletSpeedState;
            bulletState.bulletRotateState = bulletRotateState;
            bulletState.bulletMoveSpeed   = bulletMoveSpeed;
            bulletState.bulletRotateSpeed = bulletRotateSpeed;
            bulletState.bulletRotateLimit = bulletRotateLimit;
            bulletState.bulletDestination = bulletState.GetBulletDestination(targetPosition);
            float angle = Mathf.Atan2(bulletState.bulletDestination.y, bulletState.bulletDestination.x) * Mathf.Rad2Deg;
            bulletMove.ChangeRotateAngle(angle - 90.0f);
            changeCount++;

            if (changeCount < repeatCount)
            {
                StartCoroutine(Reaiming());
            }
        }
    }
    // 원형 판정 탄막 발사 함수 (스프라이트 회전 X)
    public void CircleBulletFire
        (GameObject obj, int bulletNumber, int bulletLayer, Vector2 bulletFirePosition, Vector3 bulletScale,
        Transform bulletParent, float circleColliderRadius, float circleColliderOffsetX, float circleColliderOffsetY, float spriteAlpha, int spriteNumber, bool isAnimation, int animatorNumber,
        BulletType bulletType, GameObject targetObject, BulletSpeedState bulletSpeedState, float bulletMoveSpeed,
        float bulletAccelerationMoveSpeed, float bulletAccelerationMoveSpeedMax, float bulletDecelerationMoveSpeed, float bulletDecelerationMoveSpeedMin, bool bulletMoveSpeedLoopBool, bool bulletMoveSpeedLoopOnceBool,
        BulletRotateState bulletRotateState, float bulletRotateSpeed, float bulletRotateLimit,
        int bulletDestinationType, Vector2 targetPosition, float addRotateAngle, int customPatternNumber = 0, bool isSpriteRotate = false,
        float spriteRotateSpeed = 0.0f, bool isGravity = false, float velocity = 0.0f, float gravityScale = 0.0f, bool isLookAt = false)
    {
        obj.SetActive(true);
        // ClearChild(obj);
        BulletState      bulletState      = obj.GetComponent <BulletState>();
        BulletMove       bulletMove       = obj.GetComponent <BulletMove>();
        ObjectRotate     objectRotate     = obj.GetComponent <ObjectRotate>();
        CircleCollider2D circleCollider2D = obj.GetComponent <CircleCollider2D>();
        SpriteRenderer   spriteRenderer   = obj.GetComponent <SpriteRenderer>();
        Animator         animator         = obj.GetComponent <Animator>();
        Rigidbody2D      rigidbody2D      = obj.GetComponent <Rigidbody2D>();

        bulletState.bulletObject = obj;
        bulletState.bulletNumber = bulletNumber;
        obj.gameObject.layer     = bulletLayer;
        obj.transform.position   = bulletFirePosition;
        obj.transform.localScale = bulletScale;
        obj.transform.SetParent(bulletParent);
        circleCollider2D.radius = circleColliderRadius;
        circleCollider2D.offset = new Vector2(circleColliderOffsetX, circleColliderOffsetY);
        spriteRenderer.color    = new Color(1.0f, 1.0f, 1.0f, spriteAlpha);
        spriteRenderer.sprite   = gameManager.bulletSprite[spriteNumber];
        if (isAnimation.Equals(true))
        {
            animator.runtimeAnimatorController = gameManager.bulletAnimatorController[animatorNumber];
        }
        else
        {
            animator.runtimeAnimatorController = null;
        }
        bulletState.bulletType                     = bulletType;
        bulletState.targetObject                   = targetObject;
        bulletState.isGrazed                       = false;
        bulletState.bulletSpeedState               = bulletSpeedState;
        bulletState.bulletMoveSpeed                = bulletMoveSpeed;
        bulletState.bulletAccelerationMoveSpeed    = bulletAccelerationMoveSpeed;
        bulletState.bulletAccelerationMoveSpeedMax = bulletAccelerationMoveSpeedMax;
        bulletState.bulletDecelerationMoveSpeed    = bulletDecelerationMoveSpeed;
        bulletState.bulletDecelerationMoveSpeedMin = bulletDecelerationMoveSpeedMin;
        bulletState.bulletMoveSpeedLoopBool        = bulletMoveSpeedLoopBool;
        bulletState.bulletMoveSpeedLoopOnceBool    = bulletMoveSpeedLoopOnceBool;
        bulletState.bulletRotateState              = bulletRotateState;
        bulletState.bulletRotateSpeed              = bulletRotateSpeed;
        bulletState.bulletRotateLimit              = bulletRotateLimit;
        switch (bulletDestinationType)
        {
        case 1:
            bulletState.bulletDestination = bulletState.GetBulletDestination(targetPosition);
            break;

        case 2:
            bulletState.bulletDestination = bulletState.GetRandomAimedBulletDestination();
            break;

        case 3:
            bulletState.bulletDestination = bulletState.GetAimedBulletDestination();
            break;

        default:
            bulletState.bulletDestination = bulletState.GetBulletDestination(new Vector2(obj.transform.position.x, obj.transform.position.y - 5.0f));
            break;
        }
        float angle = Mathf.Atan2(bulletState.bulletDestination.y, bulletState.bulletDestination.x) * Mathf.Rad2Deg;

        bulletMove.ChangeRotateAngle(angle - 90.0f + addRotateAngle);

        if (isSpriteRotate.Equals(true))
        {
            objectRotate.rotateSpeed = spriteRotateSpeed;
        }
        if (isGravity.Equals(true))
        {
            // rigidbody2D.AddForce(bullet.transform.position * velocity);
            rigidbody2D.AddForce(bulletState.bulletDestination.normalized * velocity);
            rigidbody2D.gravityScale = gravityScale;
            bulletState.isLookAt     = isLookAt;
        }

        // 커스텀 패턴 스크립트 넣기 (제작하는 대로 넣을 것)
        switch (customPatternNumber)
        {
        case 1:
            obj.AddComponent <BulletReaiming>();
            break;

        default:
            break;
        }
    }