찾기
내용으로 건너뛰기
추적
문서의 이전 판을 선택했습니다!
저장하면 이 자료로 새 판을 만듭니다.
미디어 파일
======입력 Input====== ======데스크톱 Desktop====== :!: 키보드, 조이스틱, 게임패드 입력은 유니티의 데스크탑 버전에서만 작동. 유니티는 키보드, 조이스틱과 게임패드 입력을 지원. 가상 축과 버튼은 입력 매니져 Input Manager 에서 만들수 있고 사용자는 키보드 입력을 화면 설정 대화창 screen configuration dialogue 에서 설정할 수 있다. **Edit->Project Settings->Input** {{: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)
2+1?
이 필드는 비어 있도록 유지하세요:
저장
미리 보기
취소
편집 요약
참고: 이 문서를 편집하면 내용은 다음 라이선스에 따라 배포하는 데 동의하는 것으로 간주합니다:
CC Attribution-Noncommercial-Share Alike 4.0 International
연결문서
안드로이드 스크립팅
입력 관리자
게임플레이 제작 Creating Gameplay
유니티3D ( Unity3D )
유니티 iOS 기초 Unity iOS Basics
문서 도구
문서 보기
이전 판
연결문서
맨 위로
다크 모드로 보기
☀️
Toggle Menu
유니티3D ( Unity3D )
너두 고쳐두 됩니다.
사이트 도구
최근 바뀜
미디어 관리자
사이트맵
사용자 도구
등록
로긴
최근 수정된 문서
putty
venv
[macOS / Linux (bash/zsh 등)]
postgresql
bitvise_ssh_client
screen
허니미
만듦
고위험_산모
the_siren_s_deception
[그웨덴 농장]
wegovy
[운동 루틴 (주 4~5회 권장)]
labioplasty
[실제 사례]
cin
cervical_cancer
semen_analysis
[정자 향상을 위한 방법]
misuse_endixg
misuse_celestoneg2
misuse_celestoneg28
hysterosalpingography
[비정상]