티스토리 뷰
반응형
< 1. NatCorder Asset 이란? >
현재 제가 회사를 다니면서 쓰고 있는 유료 동영상 어플입니다. 이 어플의 Sample을 보면, SNOW 어플이나 Between 어플에서 꾸욱 누르면 녹화가 되고,
녹화 버튼을 떼면, 리플레이 영상이 나오는 형식의 에셋입니다.
< 2. RecordButton 스크립트 X , ReplayCam 스크립트 사용 >
- Natcorder를 사용하시는 분들이라면, RecordButton과 ReplayCam 스크립트가 어떤 건지는 아실거라고 생각하기 때문에, 편의상 namespace와 class는 제외 시켰습니다.
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 130 131 132 133 134 135 136 | /** * EventTrigger를 추가해서, 각각 버튼에 이 스크립트가 포함되어 있는 오브젝트를 넣어주고 * 클릭 리스너로, StartRecording과 StopRecording 메서드를 사용해야 한다. */ #region OBJECT_AND_VARIABLE // 있던 부분. public bool recordMicrophoneAudio; public AudioSource audioSource; // 추가 부분! public Text timeText; // 00 : 00 으로 시간을 나타내 줄 Text 객체. public GameObject startRecButton, stopRecButton , recAnimation; // 시작 버튼과 정지 버튼, 그리고 녹화중이라고 알려주는 Image의 애니메이션 객체. private bool recoding = false; // recoding이란 변수를 만들어, 녹화중인가? 아닌가?를 알려준다. private const float MAX_RECORDING_TIME = 30f; // 최대 녹화 시간은 30초로 설정. AR을 녹화할 것이기 때문에, 과부하가 발생할 가능성이 크다. private float time = 0.0f; // 현재 녹화되고 있는 시간 변수. #endregion #region UNITY_INTERNAL_FUNC /// <summary> /// 녹화중일 때만 실행이 되고, 최대 30초동안 녹화가 되면 녹화를 정지시키는 업데이트 함수. /// </summary> private void Update() { if (recoding) { time += Time.deltaTime; timeText.text = string.Format("00 : {0}", time.ToString("00")); if (time >= MAX_RECORDING_TIME) { StopRecording(); } } } #endregion #region USER_DEFINED_FUNC /// <summary> /// 녹화가 끝나면, 시간과 현재 녹화중이 아니라는 것을 알려주기 위한 초기화 메서드. /// </summary> private void Reset() { time = 0.0f; // 시간을 초기화 하고, recoding = false; // 녹화중이 아니라는 것으로 변경한다. } /// <summary> /// 녹화를 시작했을 때, 녹화가 되었다는 것으로 변경하고, 녹화 버튼을 끄고, 녹화중에 필요한 오브젝트들을 킨다. /// </summary> private void StartRec() { recoding = true; stopRecButton.SetActive(true); startRecButton.SetActive(false); recAnimation.SetActive(true); timeText.gameObject.SetActive(true); } /// <summary> /// 녹화가 종료됐을 때, 녹화에 필요한 값들을 초기화 하고, 녹화 버튼을 키고, 녹화중이 아닐 때 필요없는 오브젝트를 끈다. /// </summary> private void StopRec() { Reset(); stopRecButton.SetActive(false); startRecButton.SetActive(true); recAnimation.SetActive(false); timeText.gameObject.SetActive(false); } /// <summary> /// 녹화 시작 부분. 원래 있던 메서드. /// </summary> public void StartRecording () { StartRec(); // StartRec 메서드를 불러온다. // 있던 부분 // Create a recording configuration const float DownscaleFactor = 2f / 3; var configuration = new Configuration((int)(Screen.width * DownscaleFactor), (int)(Screen.height * DownscaleFactor)); // Start recording with microphone audio if (recordMicrophoneAudio) { StartMicrophone(); Replay.StartRecording(Camera.main, configuration, OnReplay, audioSource, true); } // Start recording without microphone audio else { Replay.StartRecording(Camera.main, configuration, OnReplay); } } // 건드리지 않음. private void StartMicrophone () { #if !UNITY_WEBGL || UNITY_EDITOR // No `Microphone` API on WebGL :( // If the clip has not been set, set it now if (audioSource.clip == null) { audioSource.clip = Microphone.Start(null, true, 60, 48000); while (Microphone.GetPosition(null) <= 0) ; } // Play through audio source audioSource.timeSamples = Microphone.GetPosition(null); audioSource.loop = true; audioSource.Play(); #endif } public void StopRecording () { StopRec(); // StopRec 메서드를 불러온다. // 원래 있던 부분! if (recordMicrophoneAudio) audioSource.Stop(); Replay.StopRecording(); } void OnReplay (string path) { Debug.Log("Saved recording to: "+path); // Playback the video #if UNITY_IOS Handheld.PlayFullScreenMovie("file://" + path); #elif UNITY_ANDROID Handheld.PlayFullScreenMovie(path); #endif } #endregion | cs |
제가 만들어놓은 것도 주석을 달아놨고, 또한 EventTrigger 라는 컴포넌트를 각각 startButton과 stopButton 객체에 추가를 해주어야 합니다.
Natcorder 에셋을 사용하시는 데, 저 처럼 어려움을 겪으신 분
들에게 도움이 되실만한 자료가 되었으면 좋겠습니다..
즐거운 코딩 되시길 바랍니다! 감사합니다!
- 이 글에 도움이 되셨다면, 밑에 공감(♡) 버튼을 눌러주시면 감사하겠습니다. -
반응형
'게임 프로그래밍 ( 이제 안함 ) > Unity' 카테고리의 다른 글
Unity3D - Unity Services 프로젝트 삭제방법 (0) | 2018.10.12 |
---|---|
Unity3D - Android Keystore 만들기 (0) | 2018.09.21 |
Unity3D - 이벤트 함수에 대해서 (0) | 2018.09.06 |
Unity3D - 이벤트 함수 순서도 (0) | 2018.09.04 |
Unity3D - 인터넷 연결 상태 확인하기 (1) | 2018.08.20 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- spring boot
- c#
- 유니티로 배우는 C#
- Servlet
- VR
- 프로그래밍
- Controller
- Unity
- Base Of Coding
- GitHub
- 스프링
- 뷰포리아
- 프리젠테이션 로직
- Next.js
- Java
- 서블릿
- JSP
- Vuforia
- Git
- unity3d
- 비지니스 로직
- MVC
- 안드로이드
- HTML
- 유니티
- CSS
- 유니티3D
- 게임프로그래밍
- baseofcoding
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함