개발 관련/SW, App 관련

Unity와 php를 이용한 웹 데이터(text) 읽기

by 소서리스25 2023. 6. 14.
반응형

Unity와 php를 이용한 웹 데이터(text) 읽기

 

Unity에서는 언제부터인지 기억은 안 나지만..

적어도 5.6을 사용할 때부터 WWW를 이용하여 웹에 저장된 데이터를 읽어와서 활용한 적이 있다. 현재는 약간의 명령어(UnityWebRequest)가 바뀌기는 했지만 동일한 내용으로 활용할 수 있다.

물론 sql 같은 DB를 이용하면 여러 가지(보안, 속도 등)로 효율적이고 안전하겠지만 아주 간단한 자료나 업데이트 정보 같은 사소한 것을 하고자 할 때 가끔 필요한 것이라 생각한다.

자유기명식의 점수판에도 이용할 수 있다. 장점은 조금만 알면 구현과 다루기가 쉽다는 것이다. 

사용 용도에 따라서 db를 이용하기도 하고 text 방식의 웹 데이터를 읽는 방식 등 이용하는 것이 효과적일 것이다.

text 뿐만 아니라 json으로도 활용해도 좋고 실제로 그렇게 이용하는 분들도 많다.

 

그러면 text형식의 웹 데이터를 읽기 위해서는 php의 기초적인 부분을 알아야 한다. 

뭐 대부분 C# 프로그래밍과 코딩을 조금 알면 php의 내용 정도는 쉽게 찾아서 연동할 수 있다. 

아래의 php 코드는 text를 읽을 수 있도록 서버 쪽에 놓으면 된다. 읽는 방식은 POST방식이다. 이왕이면 GET방식보다는 안전하리라 생각한다.

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
<?php
$url = $_REQUEST["dataRead"];
 
if($url=="read")
{
    $file = fopen("score.txt""r");
}
 else if($url=="readBest")
{
    $file = fopen("bestscore.txt""r");
}
 
$data = array();
if($file)
{
    while (($buffer = fgets($file1024)) !== false
    {
        if($buffer != "")
        {
            array_push($data$buffer);
        }
    }
    
    rsort($data1);
    foreach($data as $key => $val)
    {
        echo $val."\r";
    }
    
    if(!feof($file))
    {
        echo "Error : Unexpected fegts() fail\n";
    }
}
 
fclose($file);
exit;
?>
cs

 

내용을 간략히 설명하면 서버에 score.txt 파일과 bestscore.txt. 파일이 있다. 이 파일들은 읽고 쓰기가 가능해야 하므로 파일질라를 통해서 권한을 777로 편하게 맞춰준다. 

Unity 코드에서 Form으로 필드값으로 "dataRead"로 하며 값을 위의 스코어 값에 맞춰 "read"와 "readBest"로 넣으면 위의 php에서 해당 부분으로 필요한 파일을 읽게 된다.

읽은 text 파일의 내용을 순차적으로 배열에 추가하여 빈 값을 읽을 때까지 읽고, 최종 읽어 들인 text들을 리턴해 주게 된다.

 

따라서 Unity의 코드를 보면 아래와 같다. 위에서 설명한 내용으로 웹의 text 데이터를 로딩한다.

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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
 
public class ScoreRead : MonoBehaviour
{
 
    public int _mode = 1;
 
    string playerNameStr;
    string rankView;
    string rankName;
 
    void Start()
    {
        StartCoroutine(ScoreReadText());
    }
 
    
    IEnumerator ScoreReadText()
    {
        string idChkURL = "http://text가 저장된 /scoreRead.php";
        WWWForm chkform = new WWWForm();
 
        if (_mode == 1)
        {
            chkform.AddField("dataRead""read");
        }
        else if (_mode == 2)
        {
            chkform.AddField("dataRead""readBest"); // readBest -> Hall of Fame
        }
 
        UnityWebRequest www = UnityWebRequest.Post(idChkURL, chkform);
        yield return www.SendWebRequest();
 
        if (www.downloadHandler.text != "" && string.IsNullOrEmpty(www.error))
        {
            print(www.downloadHandler.text);
        }
        else
        {
           print("read fail..\n" + www.error);
        }
    }
}
cs

 

여기서 url 주소에 scoreRead.php와 score.txt가 있어야 한다. 물론 읽고 쓰기 권한을 줘야 하고..

그러면 아래와 같이 정상적으로 읽은 결과를 확인할 수 있다.

실행된 text 데이터 로딩 결과
실행된 text 데이터 로딩 결과

 

예전 실제 사용했던 데이터이다. 저장 시 한글도 저장되어 있는데 UTF-8로 다시 변환하여 화면에 나타내어 준다. 내용은 점수, 사용자임의입력값, 결과값이 저장된 데이터이며 최종적으론 점수를 sort해서 순서대로 화면에 뿌려준다. 별로 해킹 할 요소가 없는 단순한 데이터이다. 물론 저장시 저기의 모든 데이터를 AES로 암호화/복호화할 수 있다.

 

반응형

댓글