체스 AI를 완성했다. 제작자가 체스를 못하는 관계로 영상은 같은 AI 로직으로 1:1을 한다. 물론 AI가 완벽하지는 않아서(혹은 AI가 같아서) 후반부로 가면 게임이 끝나지 않는 현상이 발생한다. 어차피 게임은 PVE로 할 방식이라 1~2달 정도 체스를 둔 실력으로는 이기지 못할 것이다.
각설하고, AI를 완성했으므로, 다음주는 여기에 VIVE 및 음성인식(코타나)를 활용하여 마법사 체스를 완성할 것이다. 음성인식이 발음에 영향을 많이 받으므로, VIVE 컨트롤러로 움직이는 방식을 착안해야 할 것 같다.
이번 졸업작품은 해리포터 시리즈에 착안해서 제작한다.
1. Unity를 사용한다.
2. HTC VIVE를 사용한다.
3. Windows 10 이상.
계획은 2월 초까지 완성하는 것을 목표로 한다.
기본적인 컨트롤러 작동은 왼쪽 컨트롤러는 캐릭터 움직임 오른쪽 컨트롤러는 캐릭터의 행동을 통제할 것이다.
전체적인 흐름은 미니게임 3가지로 구성한다.
1. 마법사 체스.
해리포터와 마법사의 돌에서 나온 마법사 체스를 생각했다.
참고 영상 : https://www.youtube.com/watch?v=imiVDYfoh54
1) Microsoft의 코타나를 사용해서 음성인식을 적용한다.
2) 기본적으로는 PVE를 생각하고 있으나, PVP가 가능하도록 할 것이다.
3) 음성인식의 발음 문제로 인식이 잘 안되는 문제가 생기므로 VIVE Controller도 병행해서 사용하도록 할 것이다.
2. 빗자루 경주
빗자루를 타고 경주하는 게임이다.
참고영상 : https://www.youtube.com/watch?v=yTS1VlvlGRg
1) 오른쪽 컨트롤러 트리거를 사용하면 가속 왼쪽 컨트롤러 트리거를 사용하면 감속한다.
2) 오른쪽 컨트롤러 왼쪽 컨트롤러를 일직선으로 두어야 하며, 오른쪽 컨트롤러의 위치에 따라 방향 전환이 된다. ex) 오른쪽 컨트롤러가 왼쪽 컨트롤러 보다 일정 위치 이상 오른쪽에 있으면 오른쪽으로 왼쪽으로 있으면 왼쪽으로 회전한다.
3) 단순히 컴퓨터와 승부한다. -> 이것도 PVP가 되면 좋으나... 현실을 생각하자.
3. 마법을 사용한 헤르미온느 지키기
아직 구상을 못했다.
일단 1주차로는 체스를 만들었다. 이번주에 Chess AI 알고리즘을 사용하여 PVE가 되도록 할 것이다. 알고리즘은 Alpha Beta 알고리즘을 사용한다.
이 문서는 Unity 2017.1.0f3 ver.에 쓴 문서이다.
VideoPlayer는 Unity 5.6f이상 부터 지원한 기능이다.
* Android: Supported Media Formats. See additional notes below.
* Windows: H.264 Video Decoder (see Format Constraints)
* iPhone 6-7: Compare iPhone Models (see TV and Video)
위에는 각 기기별 지원하는 동영상의 형식이다.
( .dv , .mp4 , .mpg, .mpeg, .m4v , .ogv , .vp8 , .webm )
● Source : Video Clip / URL이 있다.
Video Clip을 이용하면 간단하게 유니티 프로젝트 폴더에 동영상 파일을 넣은 다음 그걸 Drag & Drop 해주면 된다.
URL의 경우에는 http:// 혹은 file:// 을 이용해서 동영상을 찾아서 가져온다.
(주의사항 : http를 이용할 경우 파일 형식이 .mp4등 실제 동영상 주소를 가져와야한다. 예를들어 유튜브 주소로는 영상을 불러오지 못한다.)
● Play On Awake : Awake때 실행 할지의 여부를 묻는다.
● Wait For First Frame : Play On Awake이 켜져있을때 번째 프레임이 텍스처에 로드 될 때까지 기다릴 지 여부를 결정한다. 끌 경우 초기 몇 프레임이 짤려나가는 불상사가 있을 수 있다.
● Loop : 반복 여부를 묻는다.
● Playback Speed : 영상 재생 속도를 결정한다. 1은 기본 속도이다.
● Render Mode
Render Mode | |||
Camera Far Plane | 영상을 카메라의 Far Plane에서 실행한다. | ||
Camera Near Plane | 영상을 카메라의 Near Plane에서 실행한다. | ||
- Camera | 영상을 보여줄 카메라를 넣어준다. | ||
- Alpha | 영상의 알파 값을 적용한다.(알파 값을 낮추면 영상 뒤에 있는 Plane을 볼 수 있다.) | ||
Render Texture | 영상을 Texture에서 실행한다. | ||
- Target Texture | 영상을 실행할 Texture을 넣어준다. | ||
Material Override | 선택된 GameObject의 Material에서 영상을 실행한다. | ||
- Renderer | 영상을 실행할 GameObject를 넣는다. None일 경우에는 Video Player Component가 적용된 GameObject의 메터리얼에서 실행된다. | ||
- Material Property | 비디오를 재생할 메터리얼을 선택한다. | ||
API Only | 비디오를 재생할 객체를 스크립트만으로 적용하게 한다. |
● Audio Output Mode : 소리를 어떻게 재생 할 것인지 결정한다.
Audio Output Mode | |||
None | 소리를 재생하지 않는다. | ||
Audio Source | 오디오 소스를 삽입하여 재생 시킬 수 있다. (Unity 내부의 오디오 처리가 적용 될 수 있다. | ||
Direct | 유니티의 내부의 오디오 처리를 거치지 않고 바로 오디오 출력 하드웨어로 전송된다. |
비디오의 오디오 트랙 수이다.
소스가 비디오 클립인 경우 비디오 파일을 검사하여 트랙 수를 결정한다.
기본적인 스크립트 사용법
VideoPlayer는 UnityEngine.Video에 있다.
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
public class VideoController : MonoBehaviour
{
RawImage Image;
VideoPlayer vidio;
AudioSource audio;
void Awake()
{
Image = GetComponent<RawImage>();
vidio = gameObject.AddComponent<VideoPlayer>();
audio = gameObject.AddComponent<AudioSource>();
vidio.playOnAwake = false;
audio.playOnAwake = false;
audio.Pause();
PlayVideo();
}
public void PlayVideo()
{
StartCoroutine(playVideo());
}
IEnumerator playVideo()
{
vidio.source = VideoSource.Url;
vidio.url = "file://D:/하늘.mp4";
vidio.audioOutputMode = VideoAudioOutputMode.AudioSource;
vidio.EnableAudioTrack(0, true);
vidio.SetTargetAudioSource(0, audio);
vidio.Prepare();
WaitForSeconds waitTime = new WaitForSeconds(1.0f);
while (!vidio.isPrepared)
{
Debug.Log("동영상 준비중...");
yield return waitTime;
}
Debug.Log("동영상이 준비가 끝났습니다.");
Image.texture = vidio.texture;
vidio.Play();
audio.Play();
Debug.Log("동영상이 재생됩니다.");
while (vidio.isPlaying)
{
Debug.Log("동영상 재생 시간 : " + Mathf.FloorToInt((float)vidio.time));
yield return null;
}
Debug.Log("영상이 끝났습니다.");
}
}
'프로그래밍 > Unity' 카테고리의 다른 글
unity JsonUtility 사용법. (저장 / 불러오기) (0) | 2016.07.20 |
---|---|
오브젝트 풀 (0) | 2016.07.15 |
LitJSON 파일 있는지 없는지 확인 함수 (0) | 2016.07.10 |