Diary
카테고리
작성일
2024. 12. 7. 12:50
작성자
yul s
반응형

 

 

일단 기본 모양은 텍스트와 버튼으로 갖추어 두었다

 

이제 그것들이 동작하게 해야하는데

 

 

 

 

 

 

canvas 안에다가 Empty를 하나 만들고 Idle manager라고 지었다

 

이런저런 스크립트가 저기에 들어갈 예정

 

 

 

 

 

 

 

 

 

 

저 empty의 inspector에서

 

Add component를 선택하고 이름 대충짓고 새로운 스크립트 자리를 만들었다

 

그리고 만들어진 스크립트를 더블클릭하면

 

 

 

 

 

 

 

 

Visual Studio Code가 열리면서 개발자에게 익숙한 화면이 뜬다

 

뭐... 미리설치 안해놨으면 안열릴지도

 

나는 거의 파이썬밖에 써본적이 없긴한데

 

유니티는 기본언어가 C#이라고해서 그냥 C#을 써볼 예정이다

 

프로그래밍 언어라는게 하나 알면 다른거 배우기 좀 수월한 느낌이라

 

 

 

일단 테스트로 1차원 구매만 먼저 만들어보기로 했다

 

1차원만 하더라도 변수와 텍스트가 꽤 여러개 들어간다

 

C#이 처음이라 이리저리 검색하면서 구르다가 겨우만듬 ㅎ....

 

 

 

 

 

 

일단 1차원의 옵션은

 

초당 물질1개 생산 / 최초 가격은 10 MA

 

10개 구매시마다 생산배율 2배증가 / 가격 10배증가

 

정도로 세팅해 보았는데

 

 

 

 

요 부분은 사용할 변수와 텍스트와 메소드를 정의하는부분

 

 

 

 

 

스크립트 생성시 기본으로 Start()와 Update()가 있었는데

 

둘다 public 달아주고

 

Start() 안에는 각종 변수들의 최초값을 넣어줬다

 

 

 

 

 

 

 

update()는 말그대로 계속 변화하는 문자나 숫자들을 업데이트 해주는 부분

 

뭐 그냥 텍스트 바꾸고 간단한 연산이라 이지~

 

 

 

 

 

 

 

 

마지막 1차원 구매버튼을 위한 메소드를 만들었는데

 

음... 간단한걸 표현하려해도 생각보다 이것저것 수식들이 들어갔는데

 

일단 잘 되는지 보려는거니까 돌아가기만 하면 된다

 

 

 

 

여기까지 해놓고 저장하고 다시 유니티로 돌아오면

 

 

 

 

 

 

 

idle manager의 inspector 안에 저렇게 스크립트에서 만들어둔 텍스트들이 있는데

 

hierarchy의 해당 텍스트들을 드래그만 해주면된다

 

근데 이제보니 변수들도 저기서 숫자설정이 가능한걸보니

 

굳이 Start() 안에다가 기초값 안넣어도 될지도.. ㅋ

 

 

 

 

 

 

 

 

비슷한 원리로 버튼에다가도 만들어둔 메소드 연결을 해주어야하는데

 

버튼을 클릭해보면 아래에 on click() 이라고 된게 있는데 거기다 idle manager를 갖다박은뒤

 

 

 

 

 

 

 

아까 만들어둔 메소드를 찾아서 연결할수있다

 

뭐 이정도면 1차원만들기 끝...

 

 

 

 

다 만들었으니 테스트도 해보았다

 

편의상 그냥 생산속도에 x3을 넣어놓은 상태라 3배 빠르게 늘어나는모습

 

 

 

 

 

일단은 성공적

 

 

 

 

 

 

 

 

 

using System;
using UnityEngine;
using TMPro;

public class Idlegame : MonoBehaviour
{
    public TMP_Text MA_text;
    public TMP_Text MA_speed_text;
    public TMP_Text D1_text;
    public TMP_Text D1_amount_text;
    public TMP_Text D1_button_text;
    public double MA;
    public double MA_speed;
    public double D1_multiple;
    public double D1_amount;
    public double D1_amount_total;
    public double D1_cost;

    public void Start()
    {
        MA = 10;
        MA_speed = 0;
        D1_multiple = 1;
        D1_amount = 0;
        D1_amount_total = 0;
        D1_cost = 10;
    }
    public void Update()
    {
        MA_speed = D1_amount_total * D1_multiple;
        MA += MA_speed * Time.deltaTime;
        MA_text.text = "You have " + MA.ToString("F0") + " matters (MA)";
        MA_speed_text.text = "You are earning matters " + MA_speed.ToString("F2") + "/s";
        D1_text.text = "1st Dimention\nx" + D1_multiple.ToString("F2");
        D1_amount_text.text = D1_amount_total.ToString("F0");
        D1_button_text.text = "Cost : " + D1_cost.ToString("F0") + " MA";
    }
    public void D1_purchase()
    {
        if (MA >= D1_cost)
        {
            MA -= D1_cost;
            D1_amount += 1;
            D1_amount_total += 1;
            D1_cost = 10 * Math.Pow(10,Math.Truncate(D1_amount/10));
            D1_multiple = Math.Pow(2,Math.Truncate(D1_amount/10));
        }
    }
}

 

 

 

 

 

 

 

 

 

 

 

반응형