1주차에 계획했던 게임을 직접 만들기 시작했습니다.

게임 속 가상의 분야별 점수가 변경되기 위한 게임 속 가상의 뉴스를 만들었습니다.

뉴스의 텍스트는 게임 화면에서 슬라이딩되며 지나가는 방식으로 만들었습니다.

구현 방법은 구글과 AI를 통해 배웠습니다.

using UnityEngine;
using TMPro;

public class News : MonoBehaviour
{
    private float scrollSpeed = 100f;
    private RectTransform rectTransform;
    private float startX;
    private float endX;
    [SerializeField] private TextMeshProUGUI textUI; // 인스펙터에서 연결

    private int currentNewsIndex;
    private int repeatCount;
    private int maxRepeat = 1; // 반복 횟수 조절
    private bool isNewNews = true;

    [SerializeField] private GameManager gameManager;
    [SerializeField] private UiManager uiManager;

    void Start()
    {
        rectTransform = GetComponent<RectTransform>();
        startX = ((RectTransform)rectTransform.parent).rect.width + 10; // 부모(캔버스)의 오른쪽 끝에서 시작
        endX = -rectTransform.rect.width - 10; // 텍스트 전체가 왼쪽 화면 밖으로 나갈 때
        rectTransform.anchoredPosition = new Vector2(startX, rectTransform.anchoredPosition.y);
        PickRandomNews();
    }

    void Update()
    {
        rectTransform.anchoredPosition += Vector2.left * scrollSpeed * Time.deltaTime;

        // 텍스트 전체가 왼쪽 화면 밖으로 나갈 때만 위치 재조정
        if (rectTransform.anchoredPosition.x < endX)
        {
            rectTransform.anchoredPosition = new Vector2(startX, rectTransform.anchoredPosition.y);
            repeatCount++;
            isNewNews = false;
            if (repeatCount >= maxRepeat)
            {
                PickRandomNews();
                repeatCount = 0;
                isNewNews = true;
                //maxRepeat = Random.Range(5, 11); // 5~10 사이 랜덤 반복
                ApplyNewsEffect();
            }
            UpdateNewsText();
        }
    }

    private void PickRandomNews()
    {
        if (DataBase.newsInfo.Count > 0)
        {
            currentNewsIndex = Random.Range(0, DataBase.newsInfo.Count);
            UpdateNewsText();
        }
    }

    private void UpdateNewsText()
    {
        if (DataBase.newsInfo.Count > 0)
        {
            string title = DataBase.newsInfo[currentNewsIndex].Item1;
            if (isNewNews)
            {
                textUI.text = "[New!] " + title;
            }
            else
                textUI.text = title;
            //textUI.text += " " + gameManager.GetStateValue(DataBase.newsInfo[currentNewsIndex].Item2);
            //state 변경 여부 확인용
        }
        startX = ((RectTransform)rectTransform.parent).rect.width + 10; // 부모(캔버스)의 오른쪽 끝에서 시작
        endX = -rectTransform.rect.width - 10; // 텍스트 전체가 왼쪽 화면 밖으로 나갈 때
    }

    private void ApplyNewsEffect()
    {
        if (DataBase.newsInfo.Count > 0 && gameManager != null)
        {
            var news = DataBase.newsInfo[currentNewsIndex];
            string field = news.Item2; // 분야
            double multiplier = news.Item3; // 배율

            int currentValue = gameManager.GetStateValue(field);
            int newValue = (int)(currentValue * multiplier);

            if (newValue < 1)
                newValue = 1;
            else if (newValue > 500)
                newValue = 500;
            gameManager.SetStateValue(field, newValue);

            gameManager.ApplyNewStock();
        }
       
        
    }
}

image.png

이렇게 가상의 뉴스가 나올 때마다 그 뉴스에 맞게 게임속 가상의 분야 점수들이 오르고 내립니다.

그리고 그 분야 점수들은 곧 개발할 주식과 앱에 영향을 끼칩니다.