처음 도감켰을 때와 닫기 누르고 도감 버튼으로 눌렀을 때

 

프로그램 종료하고 다시 켰을때 색깔 유지 및 조정

 

+ 도감이 켜져있을 때 도감 버튼 다시 누르면 도감창 꺼짐

대화 씬의 예외처리 재수정하여 적의 이미지가 남아 있거나,

적의 이름이 나오지 않는 점 수정

 

 

 

룰렛을 돌렸을 때 폭탄이 나왔을 시 랜덤한 종류의 아이템이 출력되어 적용됨.

아이템을 획득시 가방에 저장됨.

각각의 룰렛에 있는 물약이미지들은 각각 다른 아이템을 준다.

이 중에서 파란색 물략 이미지가 나올 경우 3개의 비약중에 랜덤을 1개를 획득하여

가방에 저장한다.

 

'Project > Skill Steal Girl' 카테고리의 다른 글

[SSG] 대화, 룰렛 수정  (0) 2024.07.08
[SSG] 룰렛을 돌려 나온 아이템 획득하기  (0) 2024.07.03
[SSG] 대화창에 배경적용 시키기  (0) 2024.06.30
[SSG] Dialog Canavs Btn Test  (0) 2024.06.23
[SSG] Dialog RnD  (0) 2024.06.15

대화하는 인물과 대화를 케이스로 분류해놨는데

그에 맞춰 배경까지 연결

배경 리소스를 더 구하고

캐릭터가 각각 말할 때 DOTween을 이용하여 알파 값 처리할 필요가 있음

+ 대화하는 인물 연결 및 커멘터리(해설자 시점) 처리 필요

 

 

현재 룰렛은 8등분이 되어 있고

각각 360 / 8인 45도로 구성되어 있다.

그러므로 이 가운데 값은 22.5도이다.

룰렛을 개발자가 편하게 컨트롤 할 수 있도록 만들었다.

 

360도 * 횟수를 적용하여 여러번 돌아가고 거기에 지정한 extraAngle을 더해주면된다.

 

회전횟수를 선택할 수 있고 스탭을 조절함으로서 속도를 조절할 수 있다.

 

 

아래는 개발자들은 이미 사전에 클릭을 하면 알 수 있게 항목을 출력하도록 변경

나오는 것은 랜덤으로 변경

즉, 랜덤에 따라 특정 각도가 결정되고 그에 따라 개발자들은 출력결과를 미리 알수 있고,

유저들은 원하는 각도를 보게 되는 것이다.

 

using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using UnityEngine;
using UnityEngine.UI;

public class RouletteTest : MonoBehaviour
{
    [SerializeField] private Button btnGetIem;
    [SerializeField] private Roulette _roulette;
    //[SerializeField] private float targetAngle = -22.5f; //클로버를 겨냥

    private string[] itemNames = { "폭탄" , "기력회복", "폭탄", "체력회복", "폭탄", "금화획득","폭탄", "네잎클로버"};
    private float[] targetAngles =
    {
        22.5f, 67.5f, 112.5f, 157.5f, 202.5f, 247.5f, 292.5f, 337.5f
    };
    void Start()
    {
        btnGetIem.onClick.AddListener(() =>
        {
            int idx = UnityEngine.Random.Range(0, 8); // 0 ~ 7
            Debug.Log($"<color=yellow>{itemNames[idx]}</color>");
            _roulette.StartRotate(targetAngles[idx]);
        });
    }

}

 

using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using UnityEngine;
using UnityEngine.UI;

public class RouletteTest : MonoBehaviour
{
    [SerializeField] private Button btnGetIem;
    [SerializeField] private Roulette _roulette;
    //[SerializeField] private float targetAngle = -22.5f; //클로버를 겨냥

    private string[] itemNames = { "폭탄" , "기력회복", "폭탄", "체력회복", "폭탄", "금화획득","폭탄", "네잎클로버"};
    private float[] targetAngles =
    {
        22.5f, 67.5f, 112.5f, 157.5f, 202.5f, 247.5f, 292.5f, 337.5f
    };
    void Start()
    {
        btnGetIem.onClick.AddListener(() =>
        {
            int idx = UnityEngine.Random.Range(0, 8); // 0 ~ 7
            Debug.Log($"<color=yellow>{itemNames[idx]}</color>");
            _roulette.StartRotate(targetAngles[idx]);
        });
    }

}

'Study > ' 카테고리의 다른 글

[Tip] 맥 SVN 설치 - snailSVN  (0) 2024.07.21
[Tip] 텍스트 코루틴 애니메이션  (0) 2024.07.16
[Tip] Mathf.DeltaAngle  (0) 2024.06.29
[Tip] Object.FindObjectOfType  (0) 2024.06.11
[Tip] RenderSettings  (0) 2024.06.05

https://docs.unity3d.com/ScriptReference/Mathf.DeltaAngle.html

 

Unity - Scripting API: Mathf.DeltaAngle

Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close

docs.unity3d.com

'Study > ' 카테고리의 다른 글

[Tip] 텍스트 코루틴 애니메이션  (0) 2024.07.16
[Tip]룰렛 원하는 곳에 위치 + 텍스트 출력  (0) 2024.06.29
[Tip] Object.FindObjectOfType  (0) 2024.06.11
[Tip] RenderSettings  (0) 2024.06.05
[팁] Slider.onValueChanged  (0) 2024.06.05

 

현재 테스트 광고 단위를 사용하는데

 

배너의 크기를 조절하던 중 오류가 났다.

 

분명 커스터마이징이 가능한 줄 알았는데 애드몹에서 지정된 사이즈로만

 

변경 할 수 있던 것이다.

 

본 프로젝트에는 크기에 맞춤을 적용하였다.

 

https://developers.google.com/admob/unity/banner?hl=ko

 

배너 광고  |  Unity  |  Google for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 배너 광고 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 배너 보기는 화면 안의 한 지점을 차지하는

developers.google.com

using UnityEngine;
using GoogleMobileAds.Api;
using System;
using System.Drawing;

public class BannerManager : MonoBehaviour
{
    public static BannerManager instance;
    public static BannerManager Instance
    {
        get
        {
            // Singleton 패턴을 이용하여 단일 인스턴스 반환
            if (instance == null)
            {
                instance = FindObjectOfType<BannerManager>();
                if (instance == null)
                {
                    GameObject adMobManagerGO = new GameObject();
                    instance = adMobManagerGO.AddComponent<BannerManager>();
                    adMobManagerGO.name = "AdMobManager";
                    DontDestroyOnLoad(adMobManagerGO);
                }
            }
            return instance;
        }
    }

    public string _adUnitId;

    // 광고 뷰 객체
    BannerView _bannerView;

    public void Awake()
    {
        // 싱글톤 인스턴스 설정
        if (instance == null)
        {
            instance = this as BannerManager;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }

    public void Start()
    {
        //// Google Mobile Ads SDK 초기화
        MobileAds.Initialize((InitializationStatus initStatus) =>
        {
            // SDK 초기화 콜백
            Debug.Log("Google Mobile Ads SDK initialized.");
            // 광고 뷰 생성
            //_bannerView = new BannerView(_adUnitId, AdSize.Banner, AdPosition.Bottom);


            //AdSize adSize = new AdSize(350, 50);

            //_bannerView = new BannerView(_adUnitId, adSize, AdPosition.Bottom);

            CreateBannerView();

            ListenToAdEvents();
        });


        //CreateBannerView();

#if UNITY_ANDROID
        _adUnitId = "ca-app-pub-3940256099942544/6300978111"; // 안드로이드 테스트 광고 단위 ID
#elif UNITY_IPHONE
        _adUnitId = "ca-app-pub-3940256099942544/2934735716"; // iOS 테스트 광고 단위 ID
#else
        _adUnitId = "unused"; // 기타 플랫폼 또는 테스트에 사용되지 않는 경우
#endif
    }

    public void CreateBannerView()
    {
        Debug.Log("Creating banner view");

        // 기존 배너 뷰가 있으면 제거
        //if (_bannerView != null)
        //{
        //    _bannerView.Destroy();
        //}

        // Use the AdSize argument to set a custom size for the ad.
        AdSize adSize = AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(AdSize.FullWidth);


        //_bannerView = new BannerView(_adUnitId, adSize, AdPosition.Bottom);
        _bannerView = new BannerView(_adUnitId, adSize, AdPosition.Bottom);
       
        ListenToAdEvents();
    }/// <summary>
     /// Creates the banner view and loads a banner ad.
     /// </summary>
    public void LoadAd()
    {
        // create an instance of a banner view first.
        if (_bannerView == null)
        {
            CreateBannerView();
        }

        // create our request used to load the ad.
        var adRequest = new AdRequest();

        // send the request to load the ad.
        Debug.Log("Loading banner ad.");
        _bannerView.LoadAd(adRequest);
    }
    /// <summary>
    /// listen to events the banner view may raise.
    /// </summary>
    public void ListenToAdEvents()
    {
        // Raised when an ad is loaded into the banner view.
        _bannerView.OnBannerAdLoaded += () =>
        {
            Debug.Log("Banner view loaded an ad with response : "
                + _bannerView.GetResponseInfo());
        };
        // Raised when an ad fails to load into the banner view.
        _bannerView.OnBannerAdLoadFailed += (LoadAdError error) =>
        {
            Debug.LogError("Banner view failed to load an ad with error : "
                + error);
        };
        // Raised when the ad is estimated to have earned money.
        _bannerView.OnAdPaid += (AdValue adValue) =>
        {
            Debug.Log(String.Format("Banner view paid {0} {1}.",
                adValue.Value,
                adValue.CurrencyCode));
        };
        // Raised when an impression is recorded for an ad.
        _bannerView.OnAdImpressionRecorded += () =>
        {
            Debug.Log("Banner view recorded an impression.");
        };
        // Raised when a click is recorded for an ad.
        _bannerView.OnAdClicked += () =>
        {
            Debug.Log("Banner view was clicked.");
        };
        // Raised when an ad opened full screen content.
        _bannerView.OnAdFullScreenContentOpened += () =>
        {
            Debug.Log("Banner view full screen content opened.");
        };
        // Raised when the ad closed full screen content.
        _bannerView.OnAdFullScreenContentClosed += () =>
        {
            Debug.Log("Banner view full screen content closed.");
        };
    }/// <summary>
     /// Destroys the banner view.
     /// </summary>
    public void DestroyAd()
    {
        if (_bannerView != null)
        {
            Debug.Log("Destroying banner view.");
            _bannerView.Destroy();
            _bannerView = null;
        }
    }
}

 

using UnityEngine;
using Firebase.Analytics;

public class AdManager : MonoBehaviour
{
    private static AdManager instance;

    public static AdManager Instance
    {
        get
        {
            if (instance == null)
            {
                instance = FindObjectOfType<AdManager>();
                if (instance == null)
                {
                    GameObject adManagerGO = new GameObject();
                    instance = adManagerGO.AddComponent<AdManager>();
                    adManagerGO.name = "AdManager";
                    DontDestroyOnLoad(adManagerGO);
                }
            }
            return instance;
        }
    }

    private void Awake()
    {
        if (instance == null)
        {
            instance = this as AdManager;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }

    public void Start()
    {
        // Initialize Firebase Analytics
        FirebaseAnalytics.SetAnalyticsCollectionEnabled(true);
        FirebaseAnalytics.LogEvent(FirebaseAnalytics.EventAppOpen);
        BannerManager.Instance.LoadAd();
    }

    public void ShowInterstitialAd()
    {
        // Show interstitial ad logic here
        // For example, assuming _interstitialAd is an instance of your interstitial ad
        // and it's shown successfully, log the event
        LogInterstitialAdShownEvent();
    }

    private void LogInterstitialAdShownEvent()
    {
        // Log an event indicating the interstitial ad was shown
        FirebaseAnalytics.LogEvent("interstitial_ad_shown");
    }
}

 

 

 

public void AddLeaderboard(int score)
{
    PlayGamesPlatform.Instance.ReportScore(score, GPGSIds.leaderboard_highscore, (bool success) =>
    {
        if (success)
        {
            Debug.Log("리더보드에 점수가 성공적으로 추가되었습니다.");

        }
        else
        {
            Debug.Log("리더보드 점수 추가에 실패했습니다.");
        }
    });
}
IEnumerator CoStart()
{
    Debug.Log("몬스터가 클릭됨");
    anim.SetTrigger("Hit");
    hp--;
    currentScore++;
    Debug.Log(currentScore);
    UpdateScoreText();

    if (hp <= 0)
    {
        anim.SetBool("Die", true);
        monster.interactable = false;
        restartBtn.gameObject.SetActive(true);


        // 게임 종료 시 클릭 횟수 PlayerPrefs에 저장
        PlayerPrefs.SetInt(PlayerPrefsKey, currentScore);
        PlayerPrefs.Save();



        GPGSManager.Instance.AddLeaderboard(currentScore);
        GPGSManager.Instance.ShowLeaderBoard();
    }
    yield return null;
}

 

+ Recent posts