woong's

Unity WebView 사용하기 본문

Develop/Unity

Unity WebView 사용하기

dlsdnd345 2016. 2. 13. 20:16

Unity WebView 사용하기


​안녕하세요. Unity 에서 WebView 를 사용하면서 고생을 해서 저와 같은분이 없기를  

바라며 이렇게 포스트를 쓰고 있습니다 .

필자는 영어를 잘못해서 영어 커뮤니티 돌아다니면서 보느라 고생을 많이 했네요 .

한글로 되어 있는 포스트가 없어 포스트를 써보려 합니다 ^^


검색을 통해서 Unity WebView 가있는지를 찾아보니 IOS, Android , MacOS 를 

지원해주는 WebView 를 어떤분이 플러그인을 개발해서 GitHub에 배포를 해놓으신것을

많은 분들이 추천을 해주셔서 사용해 보았습니다 .


gree/unity-webview 플러그인

 

​위 링크를 통해서 접근 할 수 있습니다 . 

 


 

​이와 같은 화면을 볼 수 있습니다 . 

아럐 간단한 설명과 코드가 있습니다 .


오른쪽 하단의 다운로드를 통해서 다운로드를 진행합니다 .




파일을 열면 이와같은 폴더 구조를 가지고 있습니다 .

sample 코드도 있지만 저는 저 샘플 코드를 이용해서 해보니 흰색화면밖에 보이지 않아서

새로운 프로젝트를 만들어서 간단하게 WebView 화면을 구성해 보겠습니다 .


폴더구조에서 저희가 필요한것은 dist 안에 들어있는 플러그인 입니다 .




 

이제 유니티 프로젝트를 하나 생성합니다 .

 


 

 

​생성후에 Scene 을 저장하고 위 플러그인을 선택해서 Import를 진행 합니다 . 






그러면 이와 같이 플러그인 파일들이 들어와 있는것을 확인 할수 있습니다 .

저희가 사용할 주요 파일은 WebViewObject 입니다 .


파일이 Import 된것을 확인후에 Hierachy 탭에 GameObject 를 생성 합니다 .




그 후에 GameObject 에 적용 시킬 Script 파일을 만들겠습니다 .



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
using UnityEngine;
using System.Collections;
 
public class WebViewScript : MonoBehaviour {
    
    private WebViewObject webViewObject;
    
    // Use this for initialization
    void Start () {
        StartWebView();
    }
    
    // Update is called once per frame
    void Update () {
        
        if (Application.platform == RuntimePlatform.Android)
        {
            
            if (Input.GetKey(KeyCode.Escape))
            {
                Destroy(webViewObject);
                return;
            }
        }
        
    }
    
    public void StartWebView()
    {
        string strUrl = "http://www.naver.com";
        
        webViewObject =
            (new GameObject("WebViewObject")).AddComponent<WebViewObject>();
        webViewObject.Init((msg)=>{
            Debug.Log(string.Format("CallFromJS[{0}]", msg));
        });
        
        webViewObject.LoadURL(strUrl);
        webViewObject.SetVisibility(true);
        webViewObject.SetMargins(50, 50, 50, 50);
    }
}
 



주요 코드입니다 .


Udate() 구문에는 모바일 디바이스를 백 버튼을 통해서 WebView 를 닫기 위한 코드입니다 .

StartWebView() 메서드가 주요 코드입니다 .

코드가 워낙 간결해서 별다른 설명 없이도 충분히 이해 할 수 있을 것 같습니다.


이렇게 스크립트를 작성후에 GameObject 에 적용시키면 되겠습니다 .



 

​이제 실행을 해보겠습니다 . 


 

​화면에는 아무것도 나타나지않고 에러만 나타납니다 .

필자는 이에러를 잡고자 몇시간을 보냈네요 . 커뮤니티 돌아다녀도 해결 방법이 없었습니다 .

혹여나 하는 마음에 디바이스에 실행을 시켜보았습니다 .




File > Build & Run 을 선택해서 디바이스에서 실행해 보겠습니다 .




오 Editor 에서 실행한 화면과는 다르게 나타 나네요 .

뭔가 WebView 형태가 나타 난것 같습니다 .

인터넷이 연결이 안되었다고 나타납니다 .


그래서 필자는 안드로이드 개발을 하다보니 뭔가 느낌이 나서 유니티 프로젝트를 안드로이드 프로젝트로 Export를 

해보았습니다 .

 


 

​File > Build Settings 를 선택합니다 . 




Android Switch Platform 을 통해서 Android 디바이스로 바꾸어 주고 위 빨간 상자의 체크박스를 

선택하고 Export 를 진행합니다 .


그러면 아래와 같이 안드로이드 프로젝트가 생성 됩니다 .




 


안드로이드 이클립스를 통해서 실행 시켜 보겠습니다 .




Import 를 진행했습니다 .

저는 이중에 Manifest 파일을 확인하고 싶었습니다 .




퍼미션이 없습니다 .

안드로이드 디바이스에서 인터넷 통신을 하기위해서는 안드로이드 인터넷 퍼미션이 있어야 합니다 .

퍼미션이 존재하지 않아서 아까와 같은 인터넷 연결을 못한다는 화면이 나타난것 같습니다 .




Add > User Permission 을 선택합니다 .


 

​퍼미션을 추가 합니다 .

그후에 실행 하면 WebView 화면이 잘 나타나는 것을 확인 할 수 있습니다 .
하지만 터치가 안되는 현상이 일어 납니다 .

1
2
3
            <meta-data
                android:name="unityplayer.ForwardNativeEventsToDalvik"
                android:value="true" />

 

 

​Manifest 파일을 보면 위 코드의 Value 가 false 로 되어 있습니다 . 

이부분을 true 로 변경후에 실행하면 터지가 잘되는 것을 확인 할 수 있습니다.




Comments