2月 2016

2016年2月14日 星期日

【分享】Unity判斷是PC/手機/平板/iOS/Android 平台


這個可以判斷是iphone/ipad 以及 android手機或7吋以上

由於如果開發中會針對不同平台做不同處理

就可以用官方文件提供的方法來選擇不同的code

像是開發的時候常常會需要在PC(IDE上)跟目標平台不斷測試與切換就會用到

例如在PC上是mouseClick,在移動裝置上是touch



先直接上Code:
///Check the current device is tablet or not
private void checkTheCurrentDevice()
{
#if UNITY_IPHONE
string deviceModel = SystemInfo.deviceModel.ToLower().Trim();
if(deviceModel.StartsWith("ipad"))
{
bIsTablet = true;
}
else
{
bIsTablet = false;
}
#elif UNITY_ANDROID

float physicScreenSize = Mathf.Sqrt(Screen.width * Screen.width + Screen.height * Screen.height) / Screen.dpi;

if(physicScreenSize >= 7f) //If the screen size is >= 7 inches, it‘s a tablet

{
bIsTablet = true;
}

else
{
bIsTablet = false;
}

#else
bIsTablet = false;
#endif
// bIsTablet = false;
}

此外Unity官方文件有提供判斷不同平台的方法
http://docs.unity3d.com/Manual/PlatformDependentCompilation.html
簡易範例:
#if UNITY_EDITOR
    Debug.Log("Unity Editor");

#elif UNITY_IPHONE
    Debug.Log("Unity iPhone");

#else
    Debug.Log("Any other platform");

#endif
來源與補充:
http://www.tqcto.com/article/mobile/135196.html

http://www.lxway.com/422815844.htm

【分享】Unity判斷是PC/手機/平板/iOS/Android 平台


這個可以判斷是iphone/ipad 以及 android手機或7吋以上

由於如果開發中會針對不同平台做不同處理

就可以用官方文件提供的方法來選擇不同的code

像是開發的時候常常會需要在PC(IDE上)跟目標平台不斷測試與切換就會用到

例如在PC上是mouseClick,在移動裝置上是touch



先直接上Code:
///Check the current device is tablet or not
private void checkTheCurrentDevice()
{
#if UNITY_IPHONE
string deviceModel = SystemInfo.deviceModel.ToLower().Trim();
if(deviceModel.StartsWith("ipad"))
{
bIsTablet = true;
}
else
{
bIsTablet = false;
}
#elif UNITY_ANDROID

float physicScreenSize = Mathf.Sqrt(Screen.width * Screen.width + Screen.height * Screen.height) / Screen.dpi;



if(physicScreenSize >= 7f) //If the screen size is >= 7 inches, it‘s a tablet



{



bIsTablet = true;



}



else



{



bIsTablet = false;



}



#else



bIsTablet = false;



#endif





// bIsTablet = false;



}









此外Unity官方文件有提供判斷不同平台的方法
http://docs.unity3d.com/Manual/PlatformDependentCompilation.html
簡易範例:
#if UNITY_EDITOR
    Debug.Log("Unity Editor");

#elif UNITY_IPHONE
    Debug.Log("Unity iPhone");

#else
    Debug.Log("Any other platform");

#endif
來源與補充:
http://www.tqcto.com/article/mobile/135196.html

http://www.lxway.com/422815844.htm

【研究中】OnClick 與 Scroll / Drag 更精準的判斷


問題點:假設Menu中有多個Button,而Button是在一個Scroll Rect上可以滾動Menu
要如何解決使用者想要點按鈕但拖曳滾動(Scroll)選單過於靈敏而造成的誤判。

解法:將Click判斷更容易或是將Scroll觸發靈敏度降低

1.讓Click判斷更容易:目前的方法是假設觸發Down(按下)的時候紀錄位置,在Up(起來)時判斷位移,假設低於參數,則視為Click事件
優點:假設使用者想觸發按鈕,但卻略有位移會觸發Scroll,但同時也可以觸發Click達成目的
缺點:因為Scroll跟Click會同時觸發,這樣體驗上並不夠完善

2.讓Scroll靈敏度降低,可能要直接重寫Scroll方法掛在UI上,如果是直接調用的話,目前暫無解決的思路。

Code(C#)

//增強Click判定(在此觸控位移距離內都算是Click事件,以避免使用者想Click選單卻誤判為Scroll)
public float ClickJudgeDistance = 10;

public void OnPointerDown( PointerEventData eventData)
{
m_screenPos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
}

public void OnPointerUp( PointerEventData eventData ){
        Vector2 pos = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
float dis = Vector2.Distance (pos, m_screenPos);
if(dis < ClickJudgeDistance ){
onClickDelegate();

}
}

Popular Posts