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();
}
}
}
이렇게 가상의 뉴스가 나올 때마다 그 뉴스에 맞게 게임속 가상의 분야 점수들이 오르고 내립니다.
그리고 그 분야 점수들은 곧 개발할 주식과 앱에 영향을 끼칩니다.