原創(chuàng)文章如需轉(zhuǎn)載請(qǐng)注明:轉(zhuǎn)載自 脫莫柔Unity3D學(xué)習(xí)之旅
默認(rèn)輸入軸:
Horizontal 和 Vertical被映射到w, a, s, d鍵和方向鍵
Fire1, Fire2, Fire3被分別映射到Ctrl只嚣,Option(Alt)和Command鍵
Mouse X 和 Mouse Y被映射到鼠標(biāo)移動(dòng)增量
Window Shake X 和 Window Shake Y 被映射到窗口的移動(dòng)
添加新的輸入軸
添加新的虛擬軸,選擇菜單Edit->Project Settings->Input :
名稱(Name):名稱用于從腳本使用這個(gè)軸
描述名稱(Descriptive Name):正值名稱顯示于配置對(duì)話框的輸入標(biāo)簽艺沼,用于獨(dú)立版册舞。
描述負(fù)名稱(Descriptive Negative Name):負(fù)值名稱顯示于配置對(duì)話框的輸入標(biāo)簽,用于獨(dú)立版障般。
負(fù)按鈕(Negative Button):該按鈕用于在負(fù)方向移動(dòng)軸 (如:左)
正按鈕(Positive Button):該按鈕用于在正方向移動(dòng)軸 (如:右)
備選負(fù)按鈕(Alt Negative Button):備選按鈕用于在負(fù)方向移動(dòng)軸(如:a)
備選正按鈕(Alt Positive Button):備選按鈕用于在正方向移動(dòng)軸 (如:d)
重力(Gravity):當(dāng)沒有按鈕被按下调鲸,在單位每秒速度,軸下降到0挽荡。
死亡(Dead):模擬的死區(qū)大小藐石。 設(shè)定范圍內(nèi)所有模擬設(shè)備的值為0。
靈敏度(Sensitivity):在單位每秒速度定拟,軸將移向目標(biāo)值于微。這近用于數(shù)碼設(shè)備。
捕捉(Snap):如果啟用,當(dāng)按下相反方向的按鈕株依,該軸值將重設(shè)為0驱证。
反向(Invert):如果啟用,負(fù)按鈕將提供一個(gè)正值恋腕,反之亦然抹锄。
類型(Type):控制軸的輸入設(shè)備類型
軸(Axis):連接設(shè)備的軸將控制這個(gè)軸 (因?yàn)樯厦嬲?fù)按鈕設(shè)置的是左右,所以這里要選X軸)
操作桿(Joy Num)連接操縱桿將控制這個(gè)軸
移動(dòng)設(shè)備輸入
Unity 為你提供訪問(wèn)iOS/Android系統(tǒng)的Input 和 iOS Input腳本接口荠藤。
多點(diǎn)觸控
觸控列表(Input.touches):返回上一幀所有觸控狀態(tài)的對(duì)象列表(Touch[]:單個(gè)觸摸狀態(tài))伙单。
觸控狀態(tài)(TouchPhase):(例子:if(touch.phase != TouchPhase.Began))
Began:手指已觸摸屏幕。
Moved:手指在屏幕上移動(dòng)哈肖。
Stationary:手指觸摸屏幕吻育,但并沒有移動(dòng)。
Ended:手指從屏幕上移開牡彻。這是一個(gè)觸摸的最后狀態(tài)扫沼。
Canceled:系統(tǒng)取消跟蹤觸摸,如用戶把屏幕放到他臉上或超過(guò)五個(gè)接觸同時(shí)發(fā)生庄吼。這是一個(gè)觸摸的最后狀態(tài)。
設(shè)備面朝方向
Input.deviceOrientation : (例子:if (Input.deviceOrientation == DeviceOrientation.FaceDown))
Unknown:設(shè)備的方向不能被確定严就。
Portrait:設(shè)備在縱向模式总寻,設(shè)備直立并home按鈕在底部。
PortraitUpsideDown:設(shè)備在縱向模式梢为,但顛倒一下渐行,設(shè)備直立并home按鈕在頂部。
LandscapeLeft:設(shè)備在橫向模式铸董,設(shè)備直立并home按鈕在右邊祟印。
LandscapeRight:設(shè)備在橫向模式,設(shè)備直立并home按鈕在左邊粟害。
FaceUp:設(shè)備保持與地面平行蕴忆,屏幕的面向上。
FaceDown:設(shè)備保持與地面平行悲幅,屏幕的面向下套鹅。
加速傳感器
Input.acceleration :豎直拿著設(shè)備(home按鈕在底部),X軸指向右汰具,Y軸指向上卓鹿,Z軸指向前。
加速度傳感器數(shù)值可能被顛簸影響留荔。應(yīng)用低通過(guò)過(guò)濾器可以是它平滑吟孙,擺脫干擾。
//加速器刷新間隔
float AccelerometerUpdateInterval = 1.0f / 60.0f;
//值越大, 被過(guò)濾值將匯集當(dāng)前輸入采樣越慢
float LowPassKernelWidthInSeconds = 1.0f;
//過(guò)濾范圍
private float LowPassFilterFactor = AccelerometerUpdateInterval / LowPassKernelWidthInSeconds;
private Vector3 lowPassValue = Vector3.zero;
void Start () {
lowPassValue = Input.acceleration;
}
//過(guò)濾方法 (獲取加速量調(diào)用此方法即可)
Vector3 LowPassFilterAccelerometer(){
lowPassValue = Mathf.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor);
return lowPassValue;
}
GPS地理位置定位
通過(guò)iPhoneSettings.StartLocationServiceUpdates()方法開始定位服務(wù)的更新杰妓。最后通過(guò)iPhoneInput.lastLocation可以收回位置坐標(biāo)變量藻治。
API: static void StartLocationServiceUpdates ( float desiredAccuracyInMeters = 10f,float updateDistanceInMeters = 10f)
參數(shù)1:desiredAccuracyInMeters - 理想服務(wù)精確度(單位是米)。使用更高的值像500通常不需要打開GPS芯片從而保持電池電量稚失,像5-10的值可以被用來(lái)得到最好的精確度栋艳。默認(rèn)值是10米。
參數(shù)2:updateDistanceInMeters - 最小的距離(單位是米)的一種服務(wù)在橫向移動(dòng)之前必須更新iPhoneInput.lastLocation屬性句各。像500意味著更少的開銷吸占。默認(rèn)的是10米。
void Start () {
// 開始服務(wù)在查詢定位之前
iPhoneSettings.StartLocationServiceUpdates();
// 等待知道服務(wù)初始化
//iPhoneSettings.locationServiceStatus為當(dāng)前服務(wù)狀態(tài)
int maxWait = 20;
while (iPhoneSettings.locationServiceStatus == LocationServiceStatus.Initializing && maxWait > 0) {
yield return WaitForSeconds(1);
maxWait--;
}
// 在20秒內(nèi)服務(wù)沒有初始化
if (maxWait < 1) {
print("Timed out");
return;
}
// 用戶拒絕訪問(wèn)定位服務(wù)
if (iPhoneSettings.locationServiceStatus == LocationServiceStatus.Failed) {
print("User denied access to device location");
return;
}
// 被給予許可并且定位數(shù)值可以取回
else {
print("Location: " + iPhoneInput.lastLocation.latitude + " " +
iPhoneInput.lastLocation.longitude + " " +
iPhoneInput.lastLocation .altitude+ " " +
iPhoneInput.lastLocation.horizontalAccuracy + " " +
iPhoneInput.lastLocation.timestamp);
}
// 如果不需要持續(xù)查詢刷新定位停止服務(wù)
iPhoneSettings.StopLocationServiceUpdates();
}