이번에는 유니티 XR에서 구글 SQL과 연동하는 법에 대해서 알아보도록 하겠습니다.
다른 블로그에서도 구글 클라우드에서 SQL를 구축하는 건 많아서 스킵하도록 하겠습니다.
유니티에서 안드로이드 앱을 빌드해서 MariaDB, MySQL로 외부접속을 하려고 합니다.
유니티에서 서버를 이용하지 않고 바로 데이터 베이스로 접근하는 방법은 안좋은 것이라고 알고 있습니다.
그래도 한 번 알아 보겠습니다.
우선 접근하기 전에 2가지 파일은 저장해야 합니다!
1. 유니티 Mysql, Maria DB 사용하기 위한 DLL 임포트
2. MySqlConnector => Nuget 패키지 설치
유니티 Mysql, Maria DB 사용하기 위한 DLL 임포트
mysql Connector/Net 다운로드 페이지
https://downloads.mysql.com/archives/c-net/
Connector 버전은 6.9.5 이하버전으로 다운로드 하셔야합니다. (최신버전은 유니티에서 지원이 안됨)
그리고 Operating System: .NET & Mono를 선택하셔야 합니다.
여기서 6.95 이하 버전으로 다운을 받아 줍니다.
여기서 2.0, 4.0, 4.5 버전이 있다 여기서 저는 2022.3.45f1버전 기준 v4.5기준으로 가져오니깐 버전이 잘 맞았습니다.
v4.5버전 폴더에 있는 MySql.Data.dll를 가져와서 Assets 폴더 따로 폴더를 생성해서 넣어두시면 됩니다. 저는
이렇게 넣었습니다.
MySqlConnector => Nuget 패키지 설치
https://github.com/GlitchEnzo/NuGetForUnity?tab=readme-ov-file
패키지 설치하는 법은 다음과 같습니다.
빨간 박스 here를 눌러줍시다.
이후 여기서 NuGetForUnity.4.1.1.unitypackage를 설치하여 위에서 했던 방법 그대로 Plugin에 파일을 추가해서 플러그인 을 설치해줍시다.
이렇게 추가되면 클릭을 해줍시다!
이렇게 나오면 설치해주시면 됩니다!! 그러면 유니티 상에서 MySQL과 연결할 기초 작업은 끝입니다!
그럼 이전 글에서 정보를 다시 보내는 작업을 해보도록 하겠습니다.
https://newkimjiwon.tistory.com/254
코드 예시
using System;
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using SimpleJSON; // SimpleJSON 라이브러리 추가
using MySql.Data.MySqlClient; // MySQL 라이브러리 추가
public class SpeechToText : MonoBehaviour
{
// 구글 speechtotext api key
public string apiKey;
// Inspector에서 설정할 수 있도록 public으로 선언
public string server; // Google Cloud SQL 공용 IP 주소
public string database;
public string uid;
public string password;
public IEnumerator SendAudioToGoogle(byte[] audioData)
{
if (audioData == null || audioData.Length == 0)
{
Debug.LogError("Audio data is null or empty.");
yield break;
}
string url = $"https://speech.googleapis.com/v1/speech:recognize?key={apiKey}";
string audioBase64 = System.Convert.ToBase64String(audioData);
if (string.IsNullOrEmpty(audioBase64))
{
Debug.LogError("Audio Base64 is empty.");
yield break;
}
var requestData = new SpeechRecognitionRequest
{
config = new RecognitionConfig
{
encoding = "LINEAR16",
sampleRateHertz = 44100,
languageCode = "en-US"
},
audio = new RecognitionAudio
{
content = audioBase64
}
};
string jsonData = JsonUtility.ToJson(requestData);
using (UnityWebRequest request = UnityWebRequest.PostWwwForm(url, jsonData))
{
request.method = "POST";
request.SetRequestHeader("Content-Type", "application/json");
request.uploadHandler = new UploadHandlerRaw(System.Text.Encoding.UTF8.GetBytes(jsonData));
request.downloadHandler = new DownloadHandlerBuffer();
yield return request.SendWebRequest();
if (request.result != UnityWebRequest.Result.Success)
{
Debug.LogError("Error: " + request.error);
Debug.LogError("Response: " + request.downloadHandler.text);
}
else
{
// JSON 응답에서 transcript 추출
string responseText = request.downloadHandler.text;
var jsonResponse = JSON.Parse(responseText); // SimpleJSON으로 파싱
string transcript = jsonResponse["results"][0]["alternatives"][0]["transcript"]; // transcript 추출
Debug.Log("Transcript: " + transcript); // 추출된 transcript 출력
// transcript를 데이터베이스에 저장
SaveTranscriptToDatabase(transcript);
}
}
}
private void SaveTranscriptToDatabase(string transcript)
{
string connectionString = $"Server={server}; Port=3306; Database={database}; Uid={uid}; Pwd={password};";
try
{
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
Debug.Log("MySQL 연결 성공");
// 컬럼 이름을 ans로 변경
string query = "INSERT INTO table (column) VALUES (@transcript)";
using (MySqlCommand cmd = new MySqlCommand(query, connection))
{
cmd.Parameters.AddWithValue("@transcript", transcript);
cmd.ExecuteNonQuery();
Debug.Log("Transcript 저장 성공");
}
}
}
catch (System.Exception ex)
{
Debug.LogError("MySQL 연결 실패: " + ex.Message);
}
}
[System.Serializable]
public class SpeechRecognitionRequest
{
public RecognitionConfig config;
public RecognitionAudio audio;
}
[System.Serializable]
public class RecognitionConfig
{
public string encoding;
public int sampleRateHertz;
public string languageCode;
}
[System.Serializable]
public class RecognitionAudio
{
public string content;
}
}
이상 마치도록 하겠습니다 궁금하신 내용은 댓글로 알려주시면 감사하겠습니다!!
'소프트웨어 개발 > Unity' 카테고리의 다른 글
[Unity] 오브젝트에 믹사모(Mixamo) 애니메이션 적용하기 (2) | 2024.11.20 |
---|---|
[Unity] 유니티에서 XR(메타 퀘스트 2)에서 구글 STT(Speech To Text) 사용하기 (1) | 2024.11.15 |
[Unity] Unity Scenes 조명 바꾸는 법 (0) | 2024.11.15 |
[Unity] Meta Quest 2 이용한 씬 이동 (1) | 2024.10.14 |
[Unity] Meta Quest 2 VR 프로젝트 구축-2 (2) | 2024.09.25 |