最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

unity實(shí)現(xiàn)手游虛擬搖桿

 更新時(shí)間:2020年04月15日 11:19:45   作者:玉骨寒  
這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)手游虛擬搖桿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了unity實(shí)現(xiàn)手游虛擬搖桿的具體代碼,供大家參考,具體內(nèi)容如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 綁定到搖桿上的搖桿類,參考半徑50
/// </summary>
public class Rocker : MonoBehaviour {

  Vector2 m_offet;//偏移向量
  Vector2 m_originalPos;//搖桿原始屏幕坐標(biāo)
  Touch[] touches;//屏幕上觸控點(diǎn)數(shù)組
  int touch_Id = -1;//觸控點(diǎn)數(shù)組下標(biāo)
  bool isMove = false;//是否移動(dòng)
  float m_ScreenScale;
  /// <summary>
  /// 給外部調(diào)用的偏移向量,告知搖桿參數(shù)
  /// </summary>
  public Vector3 Offet
  {
    get
    {
      return m_offet;
    }
  }

  // Use this for initialization
  void Start () {

    m_originalPos = transform.position;//搖桿中心的屏幕坐標(biāo)位置
    m_ScreenScale = Screen.width / 800f;
  }

  // Update is called once per frame
  void Update () {
    //得到屏幕觸控?cái)?shù)組
    touches = Input.touches;
    if (touches.Length > 0)//如果觸點(diǎn)開啟
    {
      //得到離搖桿中心最近的觸點(diǎn)下標(biāo) touch_Id;
      if (touches.Length == 1)//只有一個(gè)觸點(diǎn)時(shí)
      {
        touch_Id = 0;
      }
      else if (touches.Length > 1)//觸點(diǎn)大于1個(gè)時(shí)
      {
        touch_Id = 0;//先假設(shè)下標(biāo)為0
        for (int i = 1; i < touches.Length; i++)//遍歷觸點(diǎn)數(shù)組
        {
          if (Vector2.SqrMagnitude(touches[i].position - m_originalPos) < Vector2.SqrMagnitude(touches[touch_Id].position - m_originalPos))//第i個(gè)點(diǎn)比假設(shè)的點(diǎn)近
          {
            touch_Id = i;//假設(shè)的點(diǎn)改為第i個(gè)點(diǎn)
          }
        }

      }

      //如果得到的觸點(diǎn)不是取消或抬起
      if (Input.GetTouch(touch_Id).phase != TouchPhase.Canceled && Input.GetTouch(touch_Id).phase != TouchPhase.Ended)
      {
        //觸點(diǎn)在搖桿范圍內(nèi)
        if(Vector2.SqrMagnitude(touches[touch_Id].position - m_originalPos) <= 50*50 * m_ScreenScale * m_ScreenScale)//50為背景半徑
        {
          isMove = true;//開啟遙控
          //搖桿開始控制,計(jì)算偏移量
          SetOffetIn();
        }
        else if(isMove)//觸點(diǎn)在搖桿范圍外,但是遙控已經(jīng)開啟
        {
          SetOffetOut();
        }
      }
      else// 手指抬起,搖桿回歸原始位置
      {
        transform.position = m_originalPos;
        m_offet = Vector2.zero;
        isMove = false;
        touch_Id = -1;
      }
    }

  }
  /// <summary>
  /// 觸點(diǎn)在操作盤內(nèi)時(shí)
  /// 搖桿控制方法
  /// </summary>
  void SetOffetIn()
  {
    //距離過小視為不偏移搖桿位置不變
    if(Vector2.SqrMagnitude(touches[touch_Id].position - m_originalPos) < 5 * m_ScreenScale)
    {
      GetComponent<Image>().rectTransform.position = m_originalPos;//搖桿定位在原始位置
      m_offet = Vector3.zero;
    }
    else
    {
      //搖桿位置追蹤
      GetComponent<Image>().rectTransform.position = touches[touch_Id].position;
      m_offet = touches[touch_Id].position - m_originalPos;//賦值偏移值
      m_offet = m_offet.normalized;//歸一化
    }
  }
  /// <summary>
  /// 觸點(diǎn)在操作盤外時(shí)
  /// 搖桿控制方法
  /// </summary>
  void SetOffetOut()
  {
    Vector2 tempDir;//臨時(shí)偏移向量
    tempDir = touches[touch_Id].position - m_originalPos;
    //更新?lián)u桿位置:距離原始位置127各單位
    GetComponent<Image>().rectTransform.position = m_originalPos + (tempDir.normalized) * 25*m_ScreenScale;
    //偏移量
    m_offet = tempDir.normalized;//歸一化
  }
  private void OnGUI()
  {
    GUIStyle style = new GUIStyle(); //實(shí)例化一個(gè)新的GUIStyle,名稱為style ,后期使用
    style.fontSize = 50; //字體的大小設(shè)置數(shù)值越大,字越大,默認(rèn)顏色為黑色 
    style.normal.textColor = new Color(1, 1, 1); //設(shè)置文本的顏色為 新的顏色(0,0,0)修改值-代表不同的顏色,值為整數(shù) 我個(gè)人覺得有點(diǎn)像RGB的感覺
    GUI.Label(new Rect(20, 30, 300, 60), "原始位置:" + m_originalPos.ToString(),style);
    GUI.Label(new Rect(20, 100, 300, 60), "搖桿位置:" + GetComponent<Image>().rectTransform.position.ToString(), style);
    GUI.Label(new Rect(20, 170, 300, 60), "觸點(diǎn)位置:" + touches[touch_Id].position.ToString(), style);
    GUI.Label(new Rect(20, 240, 300, 60), "屏幕分辨率:" + Screen.currentResolution, style);


  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于C#實(shí)現(xiàn)簡(jiǎn)單的二維碼和條形碼的生成工具

    基于C#實(shí)現(xiàn)簡(jiǎn)單的二維碼和條形碼的生成工具

    這篇文章主要為大家詳細(xì)介紹了如何基于C#實(shí)現(xiàn)簡(jiǎn)單的二維碼和條形碼工具,用于二維碼條形碼的生成與識(shí)別,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • C#實(shí)現(xiàn)遠(yuǎn)程關(guān)閉和重啟計(jì)算機(jī)的示例代碼

    C#實(shí)現(xiàn)遠(yuǎn)程關(guān)閉和重啟計(jì)算機(jī)的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)遠(yuǎn)程關(guān)閉和重啟計(jì)算機(jī)的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • Unity3D移動(dòng)端實(shí)現(xiàn)搖一搖功能

    Unity3D移動(dòng)端實(shí)現(xiàn)搖一搖功能

    這篇文章主要為大家詳細(xì)介紹了基于Unity3D移動(dòng)端實(shí)現(xiàn)搖一搖功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 利用Aspose.Word控件實(shí)現(xiàn)Word文檔的操作

    利用Aspose.Word控件實(shí)現(xiàn)Word文檔的操作

    偶然一次機(jī)會(huì),一個(gè)項(xiàng)目的報(bào)表功能指定需要導(dǎo)出為Word文檔,因此尋找了很多篇文章,不過多數(shù)介紹的比較簡(jiǎn)單一點(diǎn),于是也參考了官方的幫助介紹,終于滿足了客戶的需求。下面我由淺入深來介紹這個(gè)控件在實(shí)際業(yè)務(wù)中的使用過程吧
    2013-05-05
  • 深入多線程之:Reader與Write Locks(讀寫鎖)的使用詳解

    深入多線程之:Reader與Write Locks(讀寫鎖)的使用詳解

    本篇文章是對(duì)Reader與Write Locks(讀寫鎖)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#使用AutoMapper進(jìn)行對(duì)象映射的示例代碼

    C#使用AutoMapper進(jìn)行對(duì)象映射的示例代碼

    AutoMapper 是一個(gè)對(duì)象到對(duì)象映射的庫(kù),可以簡(jiǎn)化 DTO (Data Transfer Objects) 和實(shí)體類之間的轉(zhuǎn)換,在大型應(yīng)用程序中,通常需要將業(yè)務(wù)實(shí)體映射到視圖模型或 DTO 中,本文將詳細(xì)介紹如何在 C# 項(xiàng)目中使用 AutoMapper,包括安裝、配置、以及示例代碼
    2024-08-08
  • Unity如何獲取Texture內(nèi)存大小方法詳解

    Unity如何獲取Texture內(nèi)存大小方法詳解

    這篇文章主要為大家介紹了Unity如何獲取Texture內(nèi)存大小方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • C#通過html調(diào)用WinForm的方法

    C#通過html調(diào)用WinForm的方法

    這篇文章主要介紹了C#通過html調(diào)用WinForm的方法,涉及html頁(yè)面中使用JavaScript訪問C#的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • C#實(shí)現(xiàn)六大設(shè)計(jì)原則之接口隔離原則

    C#實(shí)現(xiàn)六大設(shè)計(jì)原則之接口隔離原則

    這篇文章介紹了C#實(shí)現(xiàn)六大設(shè)計(jì)原則之接口隔離原則的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • C# WPF 自定義按鈕的方法

    C# WPF 自定義按鈕的方法

    這篇文章主要介紹了C# WPF 自定義按鈕的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03

最新評(píng)論

榆社县| 荥经县| 南丹县| 怀化市| 瑞安市| 炎陵县| 句容市| 东乌| 陆川县| 彰武县| 罗江县| 开原市| 射阳县| 龙门县| 新河县| 车致| 宜丰县| 晋江市| 凤冈县| 太保市| 徐汇区| 河西区| 太白县| 临漳县| 玛曲县| 四子王旗| 龙海市| 教育| 扎赉特旗| 尼木县| 墨竹工卡县| 错那县| 保康县| 广元市| 集贤县| 萝北县| 茂名市| 南阳市| 梁山县| 龙游县| 花莲县|