Unity3D Input按鍵系統


原創文章如需轉載請注明:轉載自 脫莫柔Unity3D學習之旅 QQ群:【119706192 本文鏈接地址: Unity3D Input按鍵系統

默認輸入軸:

  • Horizontal 和 Vertical被映射到w, a, s, d鍵和方向鍵
  • Fire1, Fire2, Fire3被分別映射到Ctrl,Option(Alt)Command
  • Mouse X 和 Mouse Y被映射到鼠標移動增量
  • Window Shake XWindow Shake Y 被映射到窗口的移動 

添加新的輸入軸

添加新的虛擬軸,選擇菜單Edit->Project Settings->Input :

  • 名稱(Name):名稱用於從腳本使用這個軸
  • 描述名稱(Descriptive Name):正值名稱顯示於配置對話框的輸入標簽,用於獨立版。
  • 描述負名稱(Descriptive Negative Name):負值名稱顯示於配置對話框的輸入標簽,用於獨立版。
  • 負按鈕(Negative Button):該按鈕用於在負方向移動軸  (如:左)
  • 正按鈕(Positive Button):該按鈕用於在正方向移動軸   (如:右)
  • 備選負按鈕(Alt Negative Button):備選按鈕用於在負方向移動軸(如:a)
  • 備選正按鈕(Alt Positive Button):備選按鈕用於在正方向移動軸 (如:d)
  • 重力(Gravity):當沒有按鈕被按下,在單位每秒速度,軸下降到0。
  • 死亡(Dead):模擬的死區大小。 設定范圍內所有模擬設備的值為0。
  • 靈敏度(Sensitivity):在單位每秒速度,軸將移向目標值。這近用於數碼設備。
  • 捕捉(Snap):如果啟用,當按下相反方向的按鈕,該軸值將重設為0。
  • 反向(Invert):如果啟用,負按鈕將提供一個正值,反之亦然。
  • 類型(Type):控制軸的輸入設備類型
  • 軸(Axis):連接設備的軸將控制這個軸 (因為上面正負按鈕設置的是左右,所以這里要選X軸)
  • 操作桿(Joy Num)連接操縱桿將控制這個軸

移動設備輸入

Unity 為你提供訪問iOS/Android系統的Input 和 iOS Input腳本接口。

多點觸控

觸控列表(Input.touches):返回上一幀所有觸控狀態的對象列表(Touch[]:單個觸摸狀態)。

觸控狀態(TouchPhase):(例子:if(touch.phase != TouchPhase.Began))

  • Began:手指已觸摸屏幕。
  • Moved:手指在屏幕上移動。
  • Stationary:手指觸摸屏幕,但並沒有移動。
  • Ended:手指從屏幕上移開。這是一個觸摸的最后狀態。
  • Canceled:系統取消跟蹤觸摸,如用戶把屏幕放到他臉上或超過五個接觸同時發生。這是一個觸摸的最后狀態。

設備面朝方向

Input.deviceOrientation : (例子:if (Input.deviceOrientation == DeviceOrientation.FaceDown))

  • Unknown:設備的方向不能被確定。
  • Portrait:設備在縱向模式,設備直立並home按鈕在底部。
  • PortraitUpsideDown:設備在縱向模式,但顛倒一下,設備直立並home按鈕在頂部。
  • LandscapeLeft:設備在橫向模式,設備直立並home按鈕在右邊。
  • LandscapeRight:設備在橫向模式,設備直立並home按鈕在左邊。
  • FaceUp:設備保持與地面平行,屏幕的面向上。
  • FaceDown:設備保持與地面平行,屏幕的面向下。

加速傳感器

Input.acceleration :豎直拿着設備(home按鈕在底部),X軸指向右,Y軸指向上,Z軸指向前。

加速度傳感器數值可能被顛簸影響。應用低通過過濾器可以是它平滑,擺脫干擾。

//加速器刷新間隔
float AccelerometerUpdateInterval = 1.0f / 60.0f;
//值越大, 被過濾值將匯集當前輸入采樣越慢
float LowPassKernelWidthInSeconds = 1.0f; 

//過濾范圍
private float
LowPassFilterFactor = AccelerometerUpdateInterval / LowPassKernelWidthInSeconds; private Vector3 lowPassValue = Vector3.zero; void Start () { lowPassValue = Input.acceleration; } //過濾方法 (獲取加速量調用此方法即可) Vector3 LowPassFilterAccelerometer(){ lowPassValue = Mathf.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor); return lowPassValue;
}

 


GPS地理位置定位

通過iPhoneSettings.StartLocationServiceUpdates()方法開始定位服務的更新。最后通過iPhoneInput.lastLocation可以收回位置坐標變量。

API: static void StartLocationServiceUpdates ( float desiredAccuracyInMeters = 10f,float updateDistanceInMeters = 10f)

參數1:desiredAccuracyInMeters - 理想服務精確度(單位是米)。使用更高的值像500通常不需要打開GPS芯片從而保持電池電量,像5-10的值可以被用來得到最好的精確度。默認值是10米。

參數2:updateDistanceInMeters - 最小的距離(單位是米)的一種服務在橫向移動之前必須更新iPhoneInput.lastLocation屬性。像500意味着更少的開銷。默認的是10米。

void Start () {
    // 開始服務在查詢定位之前
 iPhoneSettings.StartLocationServiceUpdates();    // 等待知道服務初始化
  //iPhoneSettings.locationServiceStatus為當前服務狀態
int maxWait = 20; while (iPhoneSettings.locationServiceStatus == LocationServiceStatus.Initializing && maxWait > 0) { yield return WaitForSeconds(1); maxWait--; } // 在20秒內服務沒有初始化 if (maxWait < 1) { print("Timed out"); return; } // 用戶拒絕訪問定位服務 if (iPhoneSettings.locationServiceStatus == LocationServiceStatus.Failed) { print("User denied access to device location"); return; } // 被給予許可並且定位數值可以取回 else { print("Location: " + iPhoneInput.lastLocation.latitude + " " + iPhoneInput.lastLocation.longitude + " " + iPhoneInput.lastLocation .altitude+ " " + iPhoneInput.lastLocation.horizontalAccuracy + " " + iPhoneInput.lastLocation.timestamp); } // 如果不需要持續查詢刷新定位停止服務 iPhoneSettings.StopLocationServiceUpdates(); }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM