1. 程式人生 > >Unity實現在安卓手機上觸屏控制轉向--控制物件為飛機

Unity實現在安卓手機上觸屏控制轉向--控制物件為飛機

該例項是Unity實現在移動端通過觸控式螢幕幕進行對飛機的移動和轉向,用於學習Touch類的相關知識
public class AirControl:MonoBehaviour{
    private Transform m_transform;          //飛機例項
    public float speed = 500f;              //飛行速度
    private float rotationz = 0.0f;         //Z軸旋轉量
    public float rotateSpeed_AxisZ=45f;     //繞Z軸旋轉速度
    private Vector2 touchPosition;          //觸控點座標
    private float screenWeight;             //螢幕寬度


	void Start () {
        m_transform = this.transform;
        this.gameObject.GetComponent<Rigidbody>().useGravity = false;   //取消重力
        screenWeight = Screen.width;        //獲取螢幕寬度
	}	


	void Update () {
        //設定速度
        m_transform.Translate(new Vector3(0, 0, speed * Time.deltaTime));//設定飛機飛行速度
        m_transform.Find("propeller").transform.Rotate(new Vector3(0, 1000f * Time.deltaTime, 0));//設定螺旋槳旋轉速度
        #region 控制轉向
        rotationz = m_transform.eulerAngles.z;            //獲取飛機物件繞Z軸的旋轉量
        if (Input.touchCount > 0)   //當觸控數量大於0
        {
            for(int i=0;i<Input.touchCount;i++)
            {
                Touch touch = Input.touches[i];     //例項化當前觸控點
                if(touch.phase==TouchPhase.Stationary||touch.phase==TouchPhase.Moved)   //如果手指在螢幕上沒有移動或發生滑動時觸發的事件
                {
                    touchPosition = touch.position; //獲取觸控點座標
                    if (touchPosition.x < screenWeight / 2)   //觸控點座標的x如果在螢幕左半方
                    {
                        if (rotationz <= 45 || rotationz >= 315)       //判斷飛機自身的旋轉度
                        {
                            m_transform.Rotate(new Vector3(0, 0, rotateSpeed_AxisZ * Time.deltaTime), Space.Self);//使飛機自身旋轉
                        }
                        m_transform.Rotate(new Vector3(0, -Time.deltaTime * 30, 0), Space.World);//飛機繞世界座標整體旋轉
                    }
                    else if (touchPosition.x >= screenWeight / 2)   //觸控點座標的x如果在螢幕右半方
                    {
                        if (rotationz <= 45 || rotationz >= 315)      
                        {
                            m_transform.Rotate(new Vector3(0, 0, -rotateSpeed_AxisZ * Time.deltaTime), Space.Self);
                        }
                        m_transform.Rotate(new Vector3(0, Time.deltaTime * 30, 0), Space.World);
                    }
                }
                else if (touch.phase == TouchPhase.Ended)//如果手指離開螢幕時觸發的事件
                {
                    BackToBlance();//返回至平衡狀態
                }
            }
        }
        if (Input.touchCount == 0)//當沒有手指觸控式螢幕幕時,保持平衡狀態
        {
            BackToBlance();
        }
        #endregion
        //判斷是否為安卓裝置
        if (Application.platform == RuntimePlatform.Android)
        {
            if (Input.GetKeyDown(KeyCode.Escape))//如果按下裝置的返回鍵則結束程式
            {
                Application.Quit();
            }
        }
    }


    #region 返回至平衡狀態
    private void BackToBlance()
    {
        if (rotationz <= 180)       //右傾狀態
        {
            if (rotationz - 0 <= 2)//微調:即角度距離平衡狀態相差不超過2時進行微小轉動
            {
                m_transform.Rotate(new Vector3(0, 0, Time.deltaTime * -1));
            }
            else
            {
                m_transform.Rotate(new Vector3(0, 0, Time.deltaTime * -40));
            }
        }
        else if(rotationz>180)      //左傾狀態
        {
            if(360-rotationz<=2)
            {
                m_transform.Rotate(new Vector3(0, 0, Time.deltaTime * 1));
            }
            else
            {
                m_transform.Rotate(new Vector3(0, 0, Time.deltaTime * 40));
            }
        }
    }
    #endregion
}

該指令碼掛載在飛機物體上,主要涉及的知識:

Input.touchCount指觸控數量,大約1s鍾觸控著不放,touchCount增加50次左右,相當於Input.touches.Length。(只讀)

Input.touches一個Touch陣列,代表當前幀,所有手指在螢幕上的觸碰狀態與相關資料。(只讀)

TouchPhase指觸控相位,即觸控狀態,對應Touch類中的phase屬性,這些狀態分別是:Began(手指已觸控式螢幕幕)、Moved(手指在螢幕上移動)、Stationary(手指觸控式螢幕幕,但並沒有移動)、Ended(手指從螢幕上移開。這是一個觸控的最後狀態)、Canceled(系統取消跟蹤觸控,如使用者把螢幕放到他臉上或超過五個接觸同時發生。這是一個觸控的最後狀態

)。

transform.Rotate(new Vector3(),Space.Self/World) 控制物體旋轉,Space引數是指參照的座標系是自身的還是世界的

相關推薦

Unity實現手機控制轉向--控制物件飛機

該例項是Unity實現在移動端通過觸控式螢幕幕進行對飛機的移動和轉向,用於學習Touch類的相關知識public class AirControl:MonoBehaviour{ private Transform m_transform; //飛機

unity實現手機讀xml方法

直接上程式碼 string path = string.Empty; WWW www; if (Application.platform == RuntimePlatform.Android) { path = Appl

Unity3D 怎樣在手機播放視頻

nbsp screen mp4 unity3 clas 電腦 () div oid 曾經僅僅會在電腦上通過Unity3D播放視頻,研究了下發現通過Unity3D在手機上播放視頻也很easy。現介紹例如以下。 void OnGUI() { if

解決手機軟鍵盤彈出擠壓背景的問題

彈出 鍵盤 color col 軟鍵盤 func class div res demo: // 解決本頁面軟鍵盤彈窗背景擠壓的問題 var clientHeight = document.documentElement.clientHeight || documen

轉載一篇文章 python程序在手機使用

cto line str socket code -s sele led data from kivy.app import App from kivy.uix.button import Button class TestApp(App): def build(

手機有什麼好用的日程安排管理軟體?

安卓手機上有什麼簡單好用的日程安排管理軟體? 在百度知道上有一個於此相關的問題,題主的要求十分明確,在這篇文章中,小編不妨以圖中的問題為基準,為大家介紹一款簡單好用的手機日程安排管理軟體。 1.分類管理待辦任務的日程管理軟體 敬業籤雲便籤是一款專為商務辦公族設計的桌面提醒便

哪種手機遊戲錄更好?

  安卓手機錄屏軟體大家都知道很多,關於安卓錄屏軟體很多人都找不到可以錄製遊戲的軟體。有的手機自帶錄屏軟體,而有些手機不帶錄屏軟體,想用手機錄製遊戲全過程,卻不知所措,針對大家的煩惱,小編也是精挑細選的找出了這樣一款神奇的軟體,想知道是什麼軟體嗎?來一起接著看下去。   錄屏大師http://www.xun

手機無線投軟件哪個好?

兩種方法 ado nload 打開 proc 電腦 進行 步驟 介紹 手機投屏已經不是新鮮的事情了,有些電腦時有自帶錄屏功能的,但是並不是所有的電腦都具備這項功能,有時候甚至會覺得特別的麻煩,還要找很多投屏軟件來進行操作,那麽到底有沒有一款軟件可以讓寶寶們操作起來更加方便快

手機免費使用的CAD看圖軟體推薦!

安卓手機上免費使用的CAD看圖軟體推薦!在我們需要在手機上開啟一張CAD圖紙檔案的時候,你會不會因為打不開圖紙而煩惱呢?還有就是圖紙開啟速度過慢時間太長而焦躁呢?不過現在不需要進行擔心了,今天小編就要來給大家安利一款在手機上進行CAD圖紙檔案開啟的軟體了,圖紙開啟時間迅速且使用方便操作簡單,小面小編就來教大家

微信網頁開發wx.getLocation在手機的一個坑

    我在wx.getLocation的成功回撥函式裡,執行了一句 this.lon = res.longitude.toFixed(6)     在蘋果手機和除錯工具上都是能獲取到資料的,但是在安卓手機上this.lon沒有獲取到資料,排查之後,發

小程式 - wx.pageScrollTo手機滾動異常

官方文件 wx.pageScrollTo(Object object) 該效果在微信開發者工具的模擬器,蘋果手機上都正常滾動;但是在安卓手機上看不到正常的滾動效果,我見到過的bug有 從當前位置,滾動到最頂部,再滾動到指定位置 滾動到指定距離的偏差大 如果

兩步實現手機秒變網路攝像頭

如GIF所示,自動接起QQ電話。 QQ視訊來電自動接起來,微信視訊電自動接起來。 首先你需要兩個硬體裝置 1.一步Root了的,並且安裝手機QQ的安卓手機。 2.如果像文件一點你可能需要一個手機支架。 兩步邏輯很簡單: 1.通過Broadca

vue2.0專案中使用CSS3 animation動畫在手機失效解決辦法

vue2.0 + webpack做移動端專案,如果在專案中使用了CSS3 animation動畫屬性,會發現在ios上完全沒問題,但是在安卓手機上依然失效,儘管把animation在五大瀏覽器各種相容都

解決手機傳圖片沒有拍照選項,修改後又出現的手機能載入相簿和攝像頭但蘋果手機不能載入相簿的問題

<input type="file" id="choose" accept="image/*" multiple> 上面是原始碼,下面修改後可以讓安卓手機顯示攝像頭 <inp

手機無線投電腦 三種方法輕鬆搞

在手機上看視訊,已經是我們現在最主流的娛樂方式。不過,長時間看小螢幕對眼睛可受不了,而且一些4K、1080P的大片還是在大螢幕上更有視覺效果。這時該怎麼辦呢,有沒有什麼辦法可以將手機螢幕投射到電腦螢幕上,下面簡單幾步教你安卓手機無線投屏電腦。手機投屏到電腦其實主要使用的是WiFi傳輸,這種技術名為“Mirac

手機無線投電腦 三種方法輕松搞

wifi ef7 三方 ffffff 同步 自動搜索 網絡環境 選擇 現在 在手機上看視頻,已經是我們現在最主流的娛樂方式。不過,長時間看小屏幕對眼睛可受不了,而且一些4K、1080P的大片還是在大屏幕上更有視覺效果。這時該怎麽辦呢,有沒有什麽辦法可以將手機屏幕投射到電腦屏

React Native學習手機的返回鍵BackAndroid

使用 React Native開發,iOS搞完,開始適配安卓,由於木有接觸過安卓,所以碰到了很多問題,第一個問題,安卓的返回鍵BackAndroid問題,我寫了一個工具類,來搞定,其中用到了java原

使用springmvc 接收傳圖片,在 手機 ios ,有圖片傳就不報錯, 沒有就報下面這個錯誤,然後在pc端跟手機就不會有這個錯誤,這是為什麼呢?

七月 18, 2018 4:04:22 下午 org.apache.catalina.core.StandardWrapperValve invoke 嚴重: Servlet.service() for servlet [springMVC] in context with

解決cocos2dx CCArmature動畫在部分型號的手機播放不正常的問題

cocos2dx其實是有很多的坑,等待我們去挖掘,所以精通框架,精通opengl es是很重要的。 最近,在我做android機測試時,發現公司裡的一款三星手機的骨骼動畫顯示不全,且有的圖片會有閃爍。 一時找不到辦法,各路救助後在cocoachina上找到了解決辦法: 將C

為什麼手機的多數APP,訊息推送不了?

有人問: 蘋果手機上的APP,只要設定好了,訊息推送就沒有一點問題; 而安卓手機上,為什麼只有一部分APP(如微信等),能正常推送;而其它的APP,怎麼設定也沒有及時訊息推送? 個人的分析理解如下,說得不對的地方請各位同學斧正。呵呵。 蘋果有自己的訊息推送機制。安