Example #1
0
    void SetLaser()
    {
        Vector2 currentPosition = transform.position;
        Vector2 targetPosition  = target.transform.position;

        laserDraw.SetWidth(0.2f, 0.01f);
        laserDraw.SetColors(startColor, endColor);
        laserDraw.SetPosition(0, currentPosition);
        laserDraw.SetPosition(1, targetPosition);

        RaycastHit2D[] hits = Physics2D.LinecastAll(currentPosition, targetPosition, unitLayer);
        Debug.DrawLine(currentPosition, targetPosition, Color.red);

        if (hits.Length >= 1)
        {
            for (int i = 0; i < hits.Length; i++)
            {
                if (hits[i].collider.tag == "Player")
                {
                    IUnit unit = hits[i].collider.gameObject.GetComponent <IUnit>();
                    if (unit != null)
                    {
                        unit.Attacked(1);
                    }
                }
            }
        }

        Quaternion targetRotation = SetRotate(currentPosition, targetPosition);

        transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, 0.2f);
    }
Example #2
0
    void SetLaser()
    {
        for (int i = 0; i < (laserLaunchers.Count - 1); i++)
        {
            //발사기 별 타겟 설정 및 회전 조절
            Vector2  currentLauncher = laserLaunchers[i].transform.position;
            Vector2  nextLauncher    = laserLaunchers[i + 1].transform.position;
            Launcher Lstate          = laserLaunchers[i].GetComponent <Launcher>();

            Quaternion targetRotation = SetRotate(currentLauncher, nextLauncher);
            laserLaunchers[i].transform.rotation = Quaternion.Slerp(laserLaunchers[i].transform.rotation, targetRotation, 0.2f);

            if (i == laserLaunchers.Count - 2)
            {
                Quaternion lastRotation = SetRotate(nextLauncher, currentLauncher);
                laserLaunchers[i + 1].transform.rotation = Quaternion.Slerp(laserLaunchers[i + 1].transform.rotation, lastRotation, 0.2f);
            }

            //상태 체크 및 레이저 그리기 (비활성화면 다음 발사기로)
            if (Lstate.state == Launcher.State.Inactive)
            {
                continue;
            }

            laserDraw = laserLaunchers[i].GetComponent <LineRenderer>();
            laserDraw.SetWidth(0.1f, 0.1f);

            switch (Lstate.state)
            {
            case Launcher.State.Normal:
                laserDraw.SetColors(normalColor, normalColor);
                break;

            case Launcher.State.Invisible:
                laserDraw.SetColors(invisibleColor, invisibleColor);
                break;

            case Launcher.State.Visible:
                laserDraw.SetColors(visibleColor, visibleColor);
                break;
            }

            laserDraw.SetPosition(0, currentLauncher);
            laserDraw.SetPosition(1, nextLauncher);

            //레이저 활성화
            RaycastHit2D hit = Physics2D.Linecast(currentLauncher, nextLauncher, unitLayer);

            if (hit)
            {
                IUnit unit = hit.collider.gameObject.GetComponent <IUnit>();
                if (unit != null)
                {
                    unit.Attacked(1);
                }
            }
        }

        //마지막 레이저 발사기는 선이 안 보이게 처리
        lastLaserDraw = laserLaunchers[laserLaunchers.Count - 1].GetComponent <LineRenderer>();
        lastLaserDraw.SetWidth(0, 0);
        lastLaserDraw.SetPosition(0, laserLaunchers[laserLaunchers.Count - 1].transform.position);
        lastLaserDraw.SetPosition(1, laserLaunchers[laserLaunchers.Count - 1].transform.position);
    }