※ Windows 10 환경에서 실행하였습니다.

 

[Go 공식 문서] Go 의 로컬 모듈 만드는 방법 :  https://go.dev/doc/tutorial/create-module

[Go 공식 문서] Go 로컬 모듈 불러오는 방법 : https://go.dev/doc/tutorial/call-module-code

아래 코드 또는 이미지는 모두 예시입니다.

1. 로컬 모듈을 만들고 싶은 위치에 go mod init 명령어를 사용하여 로컬 모듈을 만들어줍니다.

/* local module/greetings.go */

package greetings

import (
	"fmt"
)

func Hello(name string) (msg string) {
	message := fmt.Sprintf("Hello, I'm %s. Nice to meet you.", name)
	fmt.Println(message)
	return message
}
go mod init my-greetings
go build

 

2. 로컬 모듈을 불러올 모듈에서 go.mod 파일을 다음과 같이 수정합니다.

/* module that I want to load local module/go.mod */

module this-is-my-program

go 1.18

replace my-greetings/greetings => "../local module"   // 절대 경로도 가능합니다.

require my-greetings/greetings v0.0.0

불러올 모듈이 많다면 아래의 형식으로도 사용할 수 있습니다.

require (
	my-greetings/greetings => "../local module"
)

코드 상에서는 아래처럼 사용합니다.

/* module that I want to load local module/main.go */

package main

import (
	"fmt"
	greetings "my-greetings/greetings"
)

func main() {
	fmt.Println("I want to load my local module here.")
	greetings.Hello("Dr.Pepper")
}

 

3. 모듈을 빌드한 후, 실행해보면 로컬 모듈에서 불러온 greetings.Hello() 함수가 정상 실행된 것을 알 수 있습니다.

 

참고 1. go.mod를 수정하지 않으면 모듈을 불러올 때, 다음과 같은 에러가 발생할 수 있습니다.

 

참고 2. go.mod 파일에 require 가 없으면 다음과 같은 에러가 발생할 수 있습니다. 그럴 때는 에러 메시지에 나온 것 처럼. go get 명령어로 로컬 모듈을 불러오면 됩니다.

그러면 go.mod 파일을 아래처럼 만들어줍니다.

 

CefSharp으로 Chromium 브라우저를 사용하면서 카카오 API를 사용하면 기본 언어가 영어로 설정된다.

추측이지만 html 언어따라 가는 것 같기도 하다.

 

CefSharp Chromium 브라우저의 언어 설정을 바꾸려면

{CefSharp.WinForms.ChromiumWebBrowser 객체}.BrowserSettings.AcceptLanguageList = "ko-KR"; 
을 넣어주면 한글로 나온다.

 

테스트는 C# .NET Framework 4.8에서 진행했다.


이 코드 그대로 적용하면 주소 설정할 때마다 마커가 계속 찍혀 맵 하나에 여러 마커가 생긴다.

맵 마커 제거 코드는 여기에서 참고하면 될 것 같다.

 

그리고 Google Map API 사용할 때 key 파라미터에는 구글에서 발급받은 API_KEY를 사용한다.




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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <style>
        html,
        body,
        #google-map {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0
        }
 
        #search-panel {
            position: absolute;
            top: 10px;
            left: 25%;
            z-index: 5;
            background-color: #FFFFFF;
            padding: 5px;
            border: 1px solid black;
            text-align: center;
            padding: left: 10px
        }
    </style>
    <title></title>
</head>
<body>
    <div id="search-panel">
        <input id="address" type="text" value="주소 입력값" />
        <button id="submit" type="button" value="Geocode">지도 검색</button>
    </div>
    <div id="google-map">
    </div>
 
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <!-- Google Map API -->
    <script async defer
    src="https://maps.googleapis.com/maps/api/js?key=API_KEY&callback=initMap">
    </script>
    <script>
        /**
         * Google Map API 주소의 callback 파라미터와 동일한 이름의 함수이다.
         * Google Map API에서 콜백으로 실행시킨다.
         */
        function initMap() {
            console.log('Map is initialized.');
 
            /**
             * 맵을 설정한다.
             * 1번째 파라미터 : 구글 맵을 표시할 위치. 여기서는 #google-map
             * 2번째 파라미터 : 맵 옵션.
             *      ㄴ zoom : 맵 확대 정도
             *      ㄴ center : 맵 중심 좌표 설정
             *              ㄴ lat : 위도 (latitude)
             *              ㄴ lng : 경도 (longitude)
             */
            var map = new google.maps.Map(document.getElementById('google-map'), {
                zoom: 12.5,
                center: {
                    lat: -34.397,
                    lng: 150.644
                }
            });
 
            /**
             * Google Geocoding. Google Map API에 포함되어 있다.
             */
            var geocoder = new google.maps.Geocoder();
 
            // submit 버튼 클릭 이벤트 실행
            document.getElementById('submit').addEventListener('click'function() {
                console.log('submit 버튼 클릭 이벤트 실행');
 
                // 여기서 실행
                geocodeAddress(geocoder, map);
            });
 
            /**
             * geocodeAddress
             * 
             * 입력한 주소로 맵의 좌표를 바꾼다.
             */
            function geocodeAddress(geocoder, resultMap) {
                console.log('geocodeAddress 함수 실행');
 
                // 주소 설정
                var address = document.getElementById('address').value;
 
                /**
                 * 입력받은 주소로 좌표에 맵 마커를 찍는다.
                 * 1번째 파라미터 : 주소 등 여러가지. 
                 *      ㄴ 참고 : https://developers.google.com/maps/documentation/javascript/geocoding#GeocodingRequests
                 * 
                 * 2번째 파라미터의 함수
                 *      ㄴ result : 결과값
                 *      ㄴ status : 상태. OK가 나오면 정상.
                 */
                geocoder.geocode({'address': address}, function(result, status) {
                    console.log(result);
                    console.log(status);
 
                    if (status === 'OK') {
                        // 맵의 중심 좌표를 설정한다.
                        resultMap.setCenter(result[0].geometry.location);
                        // 맵의 확대 정도를 설정한다.
                        resultMap.setZoom(18);
                        // 맵 마커
                        var marker = new google.maps.Marker({
                            map: resultMap,
                            position: result[0].geometry.location
                        });
 
                        // 위도
                        console.log('위도(latitude) : ' + marker.position.lat());
                        // 경도
                        console.log('경도(longitude) : ' + marker.position.lng());
                    } else {
                        alert('지오코드가 다음의 이유로 성공하지 못했습니다 : ' + status);
                    }
                });
            }
        }
    </script>
</body>
</html>
cs

 

동영상 보고 따라함.

동영상 설명은 못알아들어서 눈으로만 보고 따라함.

동영상 주소 : https://youtu.be/0ahGeTNUPLM


1. 먼저 안드로이드를 실행시킨다.



2. 이름을 정해준다.



3. SDK 설정해준다. 이때 설정한 SDK 버전을 유니티에도 쓸거니 기억해둔다.



4. Activity 는 쓰지 않을거니 추가하지 않는다.



5. BUILD SUCCESSFUL 이라고 뜰 때까지 기다린다.



6. [File] -> [New] -> [New Module...] 을 누른다.



7. Android Library 를 선택하고 Next 를 누른다.



8. 모듈 이름을 지어주고 SDK 버전 확인하고 Finish 를 누른다.



9. BUILD SUCCESSFUL 이라고 뜰 때까지 기다려준다.



10. 모듈 폴더 안에 java 폴더 안에 제일 처음 폴더 ( 그림에서 회색 표시된 폴더 )를 누르고

     오른쪽 마우스 버튼을 누른다.

     그리고 [New] -> [Java Class] 를 누른다.



11. 클래스 이름을 지어주고 OK 버튼을 누른다. 

       사진에선 이름이 잘렸지만 적어줬다.



12. 코드를 적어준다.  빨간 상자로 표시 해놓은 부분만 적는다. 



13. [Build] -> [Make Module '모듈명'] 을 누른다.



14. BUILD SUCCESSFUL 이 뜰 때까지 기다려준다.



15. 모듈 폴더를 누르고 오른쪽 마우스 버튼을 누른다.

    [Show in Explorer] 를 누른다.



16. [방금까지 만든 안드로이드 프로젝트가 저장된 폴더]\[모듈명]\build\intermediates\bundles\debug 에 

     들어가서 AndroidManifest.xml , classes.jar 파일을 복사하여 다른 곳에 저장해 둔다.



17. 플러그인을 사용할 유니티 프로젝트를 생성한다.




18. 일단 씬을 저장하고 [File] -> [Build Settings...] 를 누른다.



19. 현재 씬이 등록되어 있지 않다면 Add Open Scenes 를 눌러 등록한다.



20. 안드로이드 플랫폼으로 바꿔준다. 

       Android 누르고 좌측 하단에 Switch Platform 을 누르면 바뀐다.



21. 바뀌어진 것을 확인하고 Player Settings... 버튼을 누른다.



22. Company Name, Product Name 을 바꿔준다.



23. Minimum API Level 을 안드로이드 플러그인 만들 때와 똑같은 것으로 바꿔준다.

       아까 바꾼 Company Name, Product Name 과 똑같이 밑에도 바꿔준다.




24. 폴더를 만든다.



25. libs 를 누르고 오른쪽 마우스 버튼을 눌러 Show in Explorer 를 누른다.



26. 16번에서 저장한 파일들을 붙여 넣는다.



27. 똑같이 따라한다. 안에 내용도 똑같이 만든다.



28. 스크립트를 하나 만든다.



29. 안드로이드 플러그인의 package 이름,  class 이름 그리고 메소드 이름을 기억해둔다.



30. 따라 적는다. 

 AndroidJavaClass plugin = new AndroidJavaClass("package이름.class 이름");

       plugin.CallStatic<메소드 리턴 타입>("메소드명", 메소드 파라미터);



31. 방금 만들었던 스크립트를 넣어준다.



32. 빌드 한다.



33. 안드로이드 폰에서 잘 나오는 지 확인한다.

     무조건 안드로이드에서 확인해야한다.

       조금 잘렸지만 잘 나온다.





+ ) 만약 안드로이드 플러그인의 내용을 바꾸고 싶으면 바꾸고 난 다음에 다시 모듈 빌드를 하고 유니티 프로젝트에 파일을 붙여넣고 스크립트 수정하고 유니티 빌드까지 하면 바뀐 상태로 나온다.

+ Recent posts