Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

게임 프로그래밍

[Unity] Project_SHJ 지금까지 만든것들 본문

프로그래밍/게임제작

[Unity] Project_SHJ 지금까지 만든것들

Junwe 2020. 1. 7. 02:10

마지막으로 글을 올린게 12월 24일.. 벌써 작년이다.

 

그 동안 조금씩 계속 만들고 있었는데 일단 만든걸 정리해볼려고 한다.

 

날라다니는 몬스터
던지는 몬스터
수류탄 총알

일단 몬스터 추가, 총 추가 등 여러가지 만들었다.

 

그리고 내부적으로도 Monomonobehaviour 상속받은 애들이 자료를 가지는 것이 아닌 Scriptableobject를 이용해서 자료를 가지는것으로 바꾸었다. 이렇게 만들어서 몇가지 이점이 있는데 간단하게

1. Scriptableobject는 값을 만드는게 아닌 C언어에 포인터 같은 형태로 가지고 있는것이다. 그러므로 효율적으로 데이터를 사용할 수 있다.(간단하게 몬스터 HP를 Monomonobehaviour 상속받은 클래스로 만든다면 100개의 몬스터를 만든다면 100개의 HP 변수가 있을 것이다. Scriptableobject에서 값을 가져오면 C언어의 포인터, 참조의 형태라는 것이다.)

2. 여러 곳에서 데이터 사용할때 느슨한 결합이 가능해진다. Player나 Monster HPBarUI 같은 곳에서 몬스터에 HP를 알아야한다면 Monster 클래스를 넘겨야할 것이다. 근데 Scriptableobject로 데이터를 가지고 있으면 이 Scriptableobject만알고있음된다. 그러면 느슨한 결합이 가능하겠지?

 

대충 알고 있는건 이 정도이다. Scriptableobject에 대한 설명은 나중에 더 하는걸로...

 

또 간단하게 안드로이드 빌드 시스템을 만들었다. 그냥 keystore입력하는게 귀찮아서이다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEditor.Build;
using System.IO;
using System.Diagnostics;

public class Builder : EditorWindow
{
    static void SendMessageToDiscord(string fileName,string downloadLink,string version)
    {
        BulidInfomation buildinfo = AssetDatabase.LoadAssetAtPath<BulidInfomation>("Assets/Editor/AndroidInfomation.asset");
        ProcessStartInfo processinfo = new ProcessStartInfo();
        Process pro = new Process();
        string Arguments = buildinfo.BatFildPath + " " + fileName + " " + downloadLink + " " +  version;


        processinfo.FileName = "cmd.exe";
        processinfo.RedirectStandardInput = true;
        processinfo.UseShellExecute = false;
        pro.StartInfo = processinfo;

        pro.Start();

        pro.StandardInput.Write(Arguments + System.Environment.NewLine);
        pro.StandardInput.Close();
    }
    [MenuItem("Bulid/Android")]
    static void AndroidBuild()
    {

        string[] scenes = FindEnabledEditorScenes();

        BulidInfomation info = AssetDatabase.LoadAssetAtPath<BulidInfomation>("Assets/Editor/AndroidInfomation.asset");
        PlayerSettings.Android.keyaliasPass = info.Pass;
        PlayerSettings.Android.keystorePass = info.Pass;
        PlayerSettings.Android.bundleVersionCode = int.Parse(info.VerCode);
        PlayerSettings.bundleVersion = info.Ver;

        string path = info.Path;//Application.persistentDataPath;//EditorUtility.OpenFolderPanel("저장 위치를 선택해주세요", "", "");

        path += "/build";

        Directory.CreateDirectory(path);
        string fileName = info.AppName + "_" + info.Ver + ".apk";

        BuildPipeline.BuildPlayer(scenes, path + "/" + fileName, BuildTarget.Android, BuildOptions.None);
        System.Diagnostics.Process.Start(path);

        SendMessageToDiscore(fileName,info.DownloadLink,info.Ver);
    }

    public static void test()
    {
        string path = Application.dataPath + "/build";
        Directory.CreateDirectory(path);
    }

    static private string[] FindEnabledEditorScenes()
    {
        List<string> EditorScenes = new List<string>();

        foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
        {
            if (!scene.enabled) continue;
            EditorScenes.Add(scene.path);
        }

        return EditorScenes.ToArray();
    }
}

 

대충 이러한 스크립트이다. 간단하니 주석도 필요없겠지?

아 그리고 discord를 이용해서 빌드 메세지를 보내는 부분을 만들었다.

아무래도 핸드폰에서 바로 볼수 있고 디자인하는 친구에게도 따로 연락안해도 되니 잘 만든것같다. 버그가 좀 있지만..

 

이런식으로 메세지가 가게 만들었다. 메세지가 쌓이면 로그 기능도 되니 참 좋을듯.

 

한것들은 더 많은것 같은데... 몬스터를 상태패턴과 커맨드 패턴을 이용한거라든지... 빌더 패턴이라든지...

근데 그런것까지 적을 필요는 없어보인다.

 

계속 열심히 만들어보자.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Comments