찾기
내용으로 건너뛰기
추적
문서의 이전 판을 선택했습니다!
저장하면 이 자료로 새 판을 만듭니다.
미디어 파일
======입력 Input====== ======데스크톱 Desktop====== 유니티는 키보드, 조이스틱과 게임패드 입력을 지원함. :!: 키보드, 조이스틱, 게임패드 입력은 유니티의 데스크탑 버전에서만 작동. 가상 축과 버튼은 [[unity:class-inputmanager|입력 매니져 Input Manager]] (**Edit->Project Settings->Input**)에서 만들수 있고 사용자는 키보드 입력을 화면 설정 대화창 screen configuration dialogue 에서 설정할 수 있다. {{:unity3d:InputSelector.png}} 사용자는 조이스틱, 게임패드, 키보드 그리고 마우스를 설정하고 그것들 모두를 하나의 간단한 스크립팅 인터페이스를 통해 접근할 수 있다. 스크립트에서 모든 가상 축은 그들의 이름을 통해 접근하게 된다. 모든 프로젝트는 생성되었을 때 아래의 기본 입력 축 input axe 을 가진다: * //수평 Horizontal// and //수직 Vertical//은 w, a, s, d와 화살표 키로 연결 map 되어 있다. * //발사 Fire1//, // 발사 Fire2//, // 발사 Fire3// 는 각각 Ctrl, Option (Alt), Command으로 연결되어 있다. * //마우스 Mouse X// 와 //마우스 Mouse Y// 는 마우스 이동의 델타 delta 와 연결되어 있다. * //윈도우 셰이크 Window Shake X// 와//윈도우 셰이크 Window Shake Y// 는 윈도우 이동과 연결되어 있다. ====새로운 입력 축 추가하기 Adding new Input Axes==== 새로운 입력 축을 추가하고 싶으면 **Edit->Project Settings->Input** 메뉴로 간다. 여기서 각 축의 설정도 바꿀수 있다. {{:unity3d:InputAxis.png}} 사용자는 각각의 축을 조이스틱, 마우스, 또는 키보드 키들의 두개의 버튼들에 연결. |//Name// |스크립트에서 이 축을 확인하기 위한 문자열 string 의 이름. | |//Descriptive Name// |스탠드얼론 빌드에서 설정 대화창의 입력 탭에 보여지는 양의 (+) positive 값을 지닌 이름.| |//Descriptive Negative Name// |스탠드얼론 빌드에서 설정 대화창의 입력 탭에 보여지는 음의 (-) negative 값을 지닌 이름.| |//Negative Button// |음(-)의 방향으로 축을 미는데 사용되는 버튼. | |//Positive Button// |양(+)의 방향으로 축을 미는데 사용되는 버튼. | |//Alt Negative Button// |음(-)의 방향으로 축을 미는데 사용되는 또 다른 버튼. | |//Alt Positive Button// |양(+)의 방향으로 축을 미는데 사용되는 또 다른 버튼.| |//Gravity// |아무 버튼도 누르지 않았을 때 축이 중립 neutral 으로 떨어지는 초당 단위 units per second 속도.| |//Dead// |아날로그 데드존 dead zone 의 크기. 이 범위에 속하는 모든 아날로그 장치 값은 맵이 중립이 되게 만듭니다.| |//Sensitivity// |축이 목표 값으로 가는 초당 단위 속도. 이것은 디지털 장치들에만 해당 된다. | |//Snap// |활성화되면 반대 방향의 버튼을 눌렀을 때 이 축의 값이 0으로 리셋된다. | |//Invert// |활성화되면 음 Negative 버튼들이 양 positive 값을 보내고 그 반대의 경우도 성립. | |//Type// |이 축을 제어할 입력 종류. | |//Axis// |이 축을 제어할 연결 장치의 축. | |//Joy Num// |이 축을 제어할 연결된 조이스틱. | 입력의 더 나은 모양과 느낌을 위해서 위의 설정을 이용하라. 이들은 모두 에디터에 풍선도움말 tooltips 로도 볼 수 있다. ====스크립트에서 입력 축 이용하기 Using Input Axes from Scripts==== 사용자는 이런 스크립트를 통해 현재 상태를 아래와 같이 물을 query 수 있다: <file csharp>value = Input.GetAxis ("Horizontal"); </file> 축은 -1부터 1까지의 값을 가진다. 중립 위치는 0이다. 이것은 조이스틱과 키보드 입력의 경우이다. 그러나 마우스 델타 Mouse Delta 와 윈도우 셰이크 델타 Window Shake Delta 는 마지막 프레임동안 얼마나 마우스나 윈도우가 움직였는가 이다. 즉 이것은 사용자가 마우스를 빨리 움직이면 그것이 1보다 크거나 -1보다 작을 수도 있다는 말이다. 같은 이름으로 여러 개의 축을 만드는 것은 가능. 입력 축 input axis 을 얻을 때는 가장 큰 절대값을 가진 축이 불려온다. 이것은 하나의 축 이름에 하나 이상의 입력 장치를 할당하는 것을 가능하게 . 예를 들어, 키보드 입력을 위한 축 하나를 만들고 같은 이름으로 조이스틱 입력을 위한 축을 만듭니다. 만약 사용자가 조이스틱을 이용하면 입력은 조이스틱에서 올 것이고 그렇지 않으면 입력은 키보드에서 오게 될 것이다. 이 방식을 통하여 사용자는 스크립트를 작성할 때 입력이 어디서 올 지 신경쓸 필요가 없게 된다. ====버튼 이름 Button Names==== 하나의 키를 어떤 축과 연결시키기 위해서는 키의 이름을 ''인스펙터 Inspector''에 //Positive Button// 또는 //Negative Button// 속성에 넣어야 . 키의 이름은 아래의 관례를 따릅니다: * 보통 키: "a", "b", "c" ... * 숫자 키: "1", "2", "3", ... * 방향 키: "up", "down", "left", "right" * 키패드 키: "[1]", "[2]", "[3]", "[+]", "[equals]" * 수정 키: "right shift", "left shift", "right ctrl", "left ctrl", "right alt", "left alt", "right cmd", "left cmd" * 마우스 버튼: "mouse 0", "mouse 1", "mouse 2", ... * 조이스틱 버튼 (모든 조이스틱에서): "joystick button 0", "joystick button 1", "joystick button 2", ... * 조이스틱 버튼(특정 조이스틱에서): "joystick button 0", "joystick button 1", "joystick 1 button 0", ... * 특수 키: "backspace", "tab", "return", "escape", "space", "delete", "enter", "insert", "home", "end", "page up", "page down" * 기능 키: "f1", "f2", "f3", ... 키들을 식별하기 위한 이름은 스크립팅 인터페이스에서나 인스펙터에서나 같다. <file csharp>value = Input.GetKey ("a"); </file> ======모바일 입력 Mobile Input====== 유니티 iOS/안드로이드는 [[ScriptRef:Input.html|Input]]과 [[ScriptRef:iPhoneInput.html|iOS Input]] 스크립트 인터페이스를 통해 아이폰, 아이패드, 그리고 안드로이드 입력 시스템에 접근할 수 있게 해준다. [[ScriptRef:Input.html|Input]]은 멀티터치 스크린, 가속도계 accelerator 그리고 기기의 화면방향 device orientation 에 접근하게 해준다. [[ScriptRef:iPhoneInput.html|iOS Input]] 는 지리적 위치 정보에 접근하게 해준다. 모바일 장치에서 키보드로의 접근은 [[unity:MobileKeyboard#iOS|iOS keyboard]]를 통해 제공된다. =====멀티터치 스크린 Multi-Touch Screen===== 아이폰과 아이팟 터치 장치는 다섯 손가락의 동시 터치를 감지할 수 있다. 사용자는 [[ScriptRef:Input-touches.html|Input.touches]] 속성 배열 property array 을 통해 마지막 프레임 동안 화면을 만진 각 손가락에 대한 상태를 가져올 수 있다. 안드로이드 장치들은 한번에 얼마나 많은 손가락 터치를 감지할 지에 대한 일관된 제한 기준이 없다. 조금 오래된 장치에서는 두 손가락 터치, 조금 더 최신 장치에서는 다섯 손가락까지 이것은 장치마다 다 틀립니다. 각 손가락 터치는 [[ScriptRef:Touch.html|Input.Touch]]의 데이타 구조로 표현된다: |PROPS |//fingerId// |하나의 터치에 대한 특별 인덱스. |//position// |그 터치의 화면에서의 위치. |//deltaPosition// |마지막 프레임 이후의 화면에서의 위치 변화. |//deltaTime// |마지막 상태 변화 이후로 지난 시간. |//tapCount// |아이폰/아이패드 화면은 사용자의 빠른 손가락 탭을 구별할 수 있다. 이 카운터는 사용자가 손가락을 옆으로 이동하지 않고도 몇번이나 탭 했는지를 알려준다. 안드로이드 기기들은 탭 수를 세지 않기 때문에 이 값은 항상 1이다. |//phase// |터치상태, 일명 "페이즈 phase"를 설명. 이것은 터치가 방금 시작되었나를, 사용자가 손가락을 움직였는가, 혹은 손가락을 떼었는가 등을 파악하도록 도와준다. |END 터치상태인 페이즈 Phase 는 아래 중 하나의 상태에 있게 된다: |//Began// |손가락이 방금 화면을 터치함. |//Moved// |손가락이 화면에서 움직임. |//Stationary// |손가락이 화면을 터치하고 있지만 마지막 프레임동안 움직임이 없었음. |//Ended// |손가락이 화면에서 들어올려짐. 이것은 터치의 마지막 페이즈 phase 이다. |//Canceled// |사용자가 장치를 얼굴에 가져다 대거나 한번에 다섯개 초과의 터치가 일어났을 때 시스템이 터치의 추적을 취소. 이것도 터치의 마지막 페이즈 phase 이다. 다음은 유저가 화면을 탭 할때마다 광선 ray 을 뿌리는 예제 스크립트이다: <file csharp> var particle : GameObject; function Update () { for (var touch : Touch in Input.touches) { if (touch.phase == TouchPhase.Began) { //현재 터치 좌표에서 광선을 만듭니다. var ray = Camera.main.ScreenPointToRay (touch.position); if (Physics.Raycast (ray)) { //히트시 파티클을 생성. Instantiate (particle, transform.position, transform.rotation); } } } } </file> ====마우스 시뮬레이션 Mouse Simulation==== 본래의 터치 지원 이외에도 유니티 iOS/안드로이드는 마우스 시뮬레이션을 제공. 사용자는 표준 [[ScriptRef:Input.html|Input]] 클래스에서 마우스 기능을 사용할 수 있다. =====장치 방향 Device Orientation===== 유니티 iOS/안드로이드는 사용자가 3차원 공간에서 기기의 실제 물리적 방향의 분리된 정보를 얻는 것을 가능하게 . 사용자가 어떻게 장치를 들고 있는가에 따라 게임의 행동 behaviors 이 반응하게 만들고 싶다면 방향 변화의 감지는 유용히 쓰일 수 있다. 사용자는 [[ScriptRef:Input-deviceOrientation.html|Input.deviceOrientation]] 속성에서 장치 방향에 대한 정보를 얻을 수 있다. 방향은 아래 중에 하나의 값을 가진다: |//Unknown// |장치 방향을 정할 수가 없다. 가령 장치가 대각선 방향으로 회전하고 있는 경우에 이다.. |//Portrait// |장치가 똑바로 서있고 홈버튼이 바닥에 있는 세로 portrait 모드이다. |//PortraitUpsideDown// |장치가 세로 모드이지만 거꾸로 세워져 홈버튼이 꼭대기에 있다. |//LandscapeLeft// |장치가 가로 모드이고 세워져 있고 홈버튼이 오른쪽에 있다. |//LandscapeRight// |장치가 가로 모드이고 세워져 있고 홈버튼이 왼족에 있다. |//FaceUp// |장치의 화면이 위 (하늘) 쪽을 향한 채로 지면과 평행으로 놓여 있다. |//FaceDown// |장치의 화면이 아래 (땅) 쪽을 향한 채로 지면과 평행으로 놓여 있다. =====가속도계 Accelerometer===== 모바일 장치가 움직이면서 내장된 가속도계 accelerometer 는 3D 공간에서 일차적인 세 개의 축에 대한 선형 가속 변화 llinear acceleration changes 를 보고. 각 축 방향으로의 가속은 G-force 값으로 하드웨어에 의해 직접 보고 되어진다. 값 1.0은 주어진 축에서 +1g의 양을 나타내며 -1.0은 -1g를 나타냅니다. 만약 사용자가 장치를 정면으로 보고 똑바로 세워서 잡고 있으면 (홈버튼이 바닥에 위치) X축은 오른쪽으로 양수값이며 Y축은 위쪽으로 양수이며 Z축은 사용자 쪽으로 양수값을 가진다. 가속도계 값은 [[ScriptRef:Input-acceleration.html|Input.acceleration]] 속성에서 얻을 수 있다. 아래는 가속도계를 이용해서 객체를 움직이는 예제 스크립트이다: <file csharp> var speed = 10.0; function Update () { var dir : Vector3 = Vector3.zero; // 장치가 지면과 평행하게 놓여있다고 가정 // 홈 버튼이 오른손 쪽에 위치해 있다 // 장치 가속도 축을 게임 좌표에 재적용: // 1) 장치의 XY 평면이 XZ평면에 적용된다 // 2) Y축을 따라 90도 회전 되었다. dir.x = -Input.acceleration.y; dir.z = Input.acceleration.x; // 가속 벡터를 단위 구 unit sphere 에 고정. if (dir.sqrMagnitude > 1) dir.Normalize(); //이것을 프레임당 10미터 대신 초당 10미터로 이동하게 만듭니다. dir *= Time.deltaTime; //객체를 이동. transform.Translate (dir * speed); } </file> ====로우-패스 필터 Low-Pass Filter==== 가속도계를 읽는 것은 불규칙한 곳들과 노이즈가 많다. 로우-패스 필터 Low-pass filter 를 신호 signal 에 적용시키는 것은 사용자가 그것을 완화시키고 고주파 노이즈를 제거하게 해준다. 아래의 스크립트는 사용자가 어떻게 로우-패스 필터를 가속도계 읽기에 적용시키는지 보여준다: <file csharp> var AccelerometerUpdateInterval : float = 1.0 / 60.0; var LowPassKernelWidthInSeconds : float = 1.0; private var LowPassFilterFactor : float = AccelerometerUpdateInterval / LowPassKernelWidthInSeconds; // tweakable private var lowPassValue : Vector3 = Vector3.zero; function Start () { lowPassValue = Input.acceleration; } function LowPassFilterAccelerometer() : Vector3 { lowPassValue = Mathf.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor); return lowPassValue; } </file> ''LowPassKernelWidthInSeconds'' 의 값이 클수록 필터된 값이 현재 입력 샘플 input sample 에 모이는 것이 느려지게 될 것이다 (반대의 경우도 마찬가지). 사용자는 ''avgSamples()'' 대신 ''LowPassFilter()'' 함수를 사용할 수 있다. ====가속도계를 읽을 때 가장 정밀한 값을 원한다면 어떻게 해야 하나요?==== [[ScriptRef:Input-acceleration.html|Input.acceleration]] 변수를 읽는 것은 하드웨어를 샘플링하는 것과 같은 것이 아니다. 간단히 말하면 유니티는 하드웨어를 60Hz의 빈도로 샘플을 모으며 그 결과를 해당 변수에 저장. 현실적으로는 이것은 조금 더 복잡. 만약 CPU에 부담이 굉장히 많은 상황이 되면 가속도계의 샘플링은 일정한 시간 간격으로 일어나지 않는다. 그 결과 시스템은 한 프레임에선 2개의 샘플을 보고하기도 하고 다음 프레임에선 1개의 샘플을 보고하기도 . 프레임에서 가속도계가 그 프레임에서 실행한 모든 측정 정보에 접근할 수 있다. 아래의 코드는 마지막 프레임안에서 수집된 모든 가속도계 이벤트의 간단한 평균을 보여줄 것이다: <file csharp> var period : float = 0.0; var acc : Vector3 = Vector3.zero; for (var evnt : iPhoneAccelerationEvent in iPhoneInput.accelerationEvents) { acc += evnt.acceleration * evnt.deltaTime; period += evnt.deltaTime; } if (period > 0) acc *= 1.0/period; return acc; </file> =====추가 읽기 Further Reading===== 유니티 모바일 입력 API는 원래 애플의 API에 기반을 둡니다. 유니티의 입력 API를 더 잘 이해하기 위해서는 원래 API를 배우면 도움이 될 것이다. 아래에서 애플 입력 API문서를 찾을 수 있다: *[[file:///Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleiPhone2_0.iPhoneLibrary.docset/Contents/Resources/Documents/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/EventHandling/chapter_8_section_1.html|Programming Guide: Event Handling (애플 아이폰 SDK 문서)]] *[[file:///Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleiPhone2_0.iPhoneLibrary.docset/Contents/Resources/Documents/documentation/UIKit/Reference/UITouch_Class/Reference/Reference.html|UITouch Class Reference (애플 iOS SDK 문서)]] _주의:_ 위 링크들은 사용자의 로컬 설치된 아이폰 SDK 참조 문서 iPhone SDK Reference Documentation 를 참조하고 본래 ObjectiveC 코드를 포함하고 있을 것이다. 유니티를 모바일 장치에서 사용하기 위해 꼭 위의 문서들을 이해할 필요는 없으나 도움이 되는 분들이 있을 것이다! ======iOS!====== [[#iPhoneInput]] =====장치의 지리적 위치 Device geographical location===== 장치의 지리적 위치는 [[ScriptRef:iPhoneInput-lastLocation.html|iPhoneInput.lastLocation]] 속성을 통해 얻을 수 있다. 사용자는 이 속성을 호출하기 전에 [[ScriptRef:iPhoneSettings.StartLocationServiceUpdates.html|iPhoneSettings.StartLocationServiceUpdates()]]를 이용해서 위치 서비스 업데이트를 시작하고 [[ScriptRef:iPhoneSettings-locationServiceStatus.html|iPhoneSettings.locationServiceStatus]]를 통해 서비스 상태를 확인해야 할 것이다. 자세한 사항은 [[ScriptRef:iPhoneSettings.StartLocationServiceUpdates.html|scripting reference]]를 보라. {{tag>유니티 unity}} * 출처: [[http://unitykoreawiki.com/index.php?n=KrMain.Input|유니티코리아위키]] (CC BY-NC-SA 2.0)
저장
미리 보기
취소
편집 요약
참고: 이 문서를 편집하면 내용은 다음 라이선스에 따라 배포하는 데 동의하는 것으로 간주합니다:
CC Attribution-Noncommercial-Share Alike 4.0 International
연결문서
안드로이드 스크립팅
입력 관리자
게임플레이 제작 Creating Gameplay
유니티3D ( Unity3D )
유니티 iOS 기초 Unity iOS Basics
문서 도구
문서 보기
이전 판
연결문서
맨 위로
다크 모드로 보기
☀️
Toggle Menu
유니티3D ( Unity3D )
너두 고쳐두 됩니다.
사이트 도구
최근 바뀜
미디어 관리자
사이트맵
사용자 도구
등록
로긴
최근 수정된 문서
정자회복플랜
[보충 루틴 (아침 기준)]
semen_analysis
[정자 향상을 위한 방법]
log2ram
iotop
만듦
luckperms
viaversion
만듦
papermc
mc
[마인크래프트 베슬로서버]
floodgate
만듦
geyser
만듦
dynmap
tesa
[⚠️ 합병증 및 주의사항]
수술적_정자채취법
[현재]
남성불임
[진단]
역행성_사정
bald_head
[먹는 약]
자연임신확률