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

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

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

本文實例為大家分享了unity實現(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;//屏幕上觸控點數(shù)組
  int touch_Id = -1;//觸控點數(shù)組下標(biāo)
  bool isMove = false;//是否移動
  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 () {
    //得到屏幕觸控數(shù)組
    touches = Input.touches;
    if (touches.Length > 0)//如果觸點開啟
    {
      //得到離搖桿中心最近的觸點下標(biāo) touch_Id;
      if (touches.Length == 1)//只有一個觸點時
      {
        touch_Id = 0;
      }
      else if (touches.Length > 1)//觸點大于1個時
      {
        touch_Id = 0;//先假設(shè)下標(biāo)為0
        for (int i = 1; i < touches.Length; i++)//遍歷觸點數(shù)組
        {
          if (Vector2.SqrMagnitude(touches[i].position - m_originalPos) < Vector2.SqrMagnitude(touches[touch_Id].position - m_originalPos))//第i個點比假設(shè)的點近
          {
            touch_Id = i;//假設(shè)的點改為第i個點
          }
        }

      }

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

  }
  /// <summary>
  /// 觸點在操作盤內(nèi)時
  /// 搖桿控制方法
  /// </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>
  /// 觸點在操作盤外時
  /// 搖桿控制方法
  /// </summary>
  void SetOffetOut()
  {
    Vector2 tempDir;//臨時偏移向量
    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(); //實例化一個新的GUIStyle,名稱為style ,后期使用
    style.fontSize = 50; //字體的大小設(shè)置數(shù)值越大,字越大,默認(rèn)顏色為黑色 
    style.normal.textColor = new Color(1, 1, 1); //設(shè)置文本的顏色為 新的顏色(0,0,0)修改值-代表不同的顏色,值為整數(shù) 我個人覺得有點像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), "觸點位置:" + touches[touch_Id].position.ToString(), style);
    GUI.Label(new Rect(20, 240, 300, 60), "屏幕分辨率:" + Screen.currentResolution, style);


  }
}

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

相關(guān)文章

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

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

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

    C#實現(xiàn)遠程關(guān)閉和重啟計算機的示例代碼

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

    Unity3D移動端實現(xiàn)搖一搖功能

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

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

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

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

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

    C#使用AutoMapper進行對象映射的示例代碼

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

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

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

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

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

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

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

    C# WPF 自定義按鈕的方法

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

最新評論

哈尔滨市| 莒南县| 麻城市| 苍南县| 沙田区| 南充市| 班玛县| 保定市| 安吉县| 梁山县| 正镶白旗| 信宜市| 东丰县| 兴山县| 邮箱| 科技| 宝丰县| 武陟县| 文化| 昌江| 金川县| 衡南县| 华蓥市| 温泉县| 东方市| 郧西县| 塔城市| 马鞍山市| 绍兴市| 贵定县| 饶平县| 白水县| 桂平市| 芮城县| 高台县| 格尔木市| 庆阳市| 阳原县| 安溪县| 彭阳县| 准格尔旗|