https://www.youtube.com/embed/7lsH6LrgQqg
씬마다 필요한 말풍선들을 특정 오브젝트 아래에 배치하여, 일정 시간 간격으로 말풍선들이 차례대로 표시되도록 함.
InvokeRepeating("PhoneChat", 1, 2);
public void PhoneChat()
{
Phone.transform.GetChild(chatNum).gameObject.SetActive(true); //다음 채팅 표시
chatNum++;
}
안드로이드 플러그인을 사용하여 기본적인 STT(Speach To Text) 구현.
녹음 버튼을 누른 후 화면에 주어진 말을 따라 말하면 그것을 인식하여 화면에 문자로 출력.
카카오 i 오픈빌더 가입 후, 카카오톡 채널 및 챗봇 구성.
실제 채팅앱을 사용하여 디지털 성범죄가 발생 할 수 있는 환경과 발화를 모의 상황을 통해 경험하고, 그에 대처하기 위한 적절한 답변을 학습.
교육 초반부 사용자의 흥미 유발 및 몰입감 강화를 위한 교구 이용 AR 콘텐츠.
흐림효과 셰이더를 적용한 이미지 프리팹을 터치 드래그 시 생성하여 모자이크 효과.
Time.deltaTime을 사용하여 클릭 시간 측정, 롱클릭 시 오브젝트를 캔버스로 계층을 옮긴 후 해당 창을 닫음.
private void Update()
{
if (isBtnDown)
{
clickTime += Time.deltaTime;
if(clickTime > 1) //1초 롱클릭 시
{
if (phraseSV != null)
{
//창닫기
this.gameObject.transform.SetParent(GameObject.Find("Canvas").transform);
Destroy(phraseSV);
}
longClicked = true;
}
}
}
드래그 코드
public void OnPointerDown(PointerEventData eventData)
{
isBtnDown = true;
}
public void OnPointerUp(PointerEventData eventData)
{
isBtnDown = false;
this.clickTime = 0; //터치 시간 초기화
longClicked = false;
}
public void OnDrag(PointerEventData eventData)
{
if (longClicked == true)
{
//드래그
Vector2 currentPos = Input.mousePosition;
this.transform.position = currentPos;
}
}
완성된 포스터 화면 전체를 캡처하여 로컬 갤러리에 저장.
//스크린샷 찍기
IEnumerator CRSaveScreenshot()
{
onCapture = true;
yield return new WaitForEndOfFrame();
...//권한허락 후
string persistentDataPath = Application.persistentDataPath;
string fileLocation = persistentDataPath.Substring(0, persistentDataPath.IndexOf("Android")) + "/DCIM/EduToGender"; //사진 저장할 경로 지정
string filename = Application.productName + "_" + System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".png"; //저장할 파일 이름 지정
string finalLOC = fileLocation + filename; //파일명 추가된 저장경로명
if (!Directory.Exists(fileLocation)) //저장경로에 해당 파일 없으면 파일 만들기
{
Directory.CreateDirectory(fileLocation);
}
byte[] imageByte; //스크린샷을 Byte로 저장.Texture2D use
Texture2D tex = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, true); //스크린샷 사이즈 설정.
tex.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0, true); //픽셀 읽기
tex.Apply(); //읽은 픽셀 텍스쳐 저장
imageByte = tex.EncodeToPNG(); //png로 변환
DestroyImmediate(tex); //다 쓴 텍스쳐 삭제하기
File.WriteAllBytes(finalLOC, imageByte); //캡쳐한 이미지 finalLoc에 저장.
AndroidJavaClass classPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject objActivity = classPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass classUri = new AndroidJavaClass("android.net.Uri");
AndroidJavaObject objIntent = new AndroidJavaObject("android.content.Intent", new object[2] { "android.intent.action.MEDIA_SCANNER_SCAN_FILE", classUri.CallStatic<AndroidJavaObject>("parse", "file://" + finalLOC) });
objActivity.Call("sendBroadcast", objIntent);
//효과음 재생
this.gameObject.GetComponent<AudioSource>().Play();
//토스트 메세지 띄우기
toast._ShowAndroidToastMessage("캡쳐되었습니다");
toast._ShowAndroidToastMessage(finalLOC + "에 저장되었습니다");
onCapture = false;
}