真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Unity實(shí)現(xiàn)虛擬搖桿的方法-創(chuàng)新互聯(lián)

這篇文章主要講解了Unity實(shí)現(xiàn)虛擬搖桿的方法,內(nèi)容清晰明了,對此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

在環(huán)翠等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,環(huán)翠網(wǎng)站建設(shè)費(fèi)用合理。

Unity實(shí)現(xiàn)虛擬搖桿的方法

面板上設(shè)置一些屬性,比如搖桿拖拽的距離,是否始終可視,是否限制虛擬搖桿位置(我是把虛擬搖桿限制在了屏幕的左下區(qū)域)。
使用GetDirAndLength()方法去獲得移動(dòng)的方向和長度即可

Unity實(shí)現(xiàn)虛擬搖桿的方法

using UnityEngine;
 
/// 
/// 虛擬搖桿管理器
/// 
public class VirtualJoystickManager : MonoBehaviour
{
  private static VirtualJoystickManager _instance;
  public static VirtualJoystickManager Instance
  {
    get
    {
      if (_instance == null)
      {
        _instance = FindObjectOfType();
      }
      return _instance;
    }
  }
 
  [Header("是否始終可視")]
  public bool alwaysVisible;//是否始終可視
  [Header("是否限制虛擬搖桿位置")]
  public bool restrictVirtualJoystickPos;//是否限制虛擬搖桿位置
 
  [Header("虛擬搖桿物體")]
  [Header("==========")]
  public GameObject virtualJoystick;//虛擬搖桿父物體
  public GameObject inside;//內(nèi)環(huán)
  public GameObject outside;//外環(huán)
 
  [Header("大拖拽距離")]
  [Header("==========")]
  public float maxDragLength;//大拖拽距離
 
  private Vector3 virtualJoystickCenter;//虛擬軸中心
 
  private void Update()
  {
    //如果限制虛擬軸位置并且虛擬軸位置超出了限制范圍則不進(jìn)行任何操作
    if (restrictVirtualJoystickPos && JudgeIsValidRange() == false)
    {
      return;
    }
 
    //更新顯示
    UpdateShow();
 
    //更新虛擬搖桿位置
    if (Input.GetMouseButtonDown(0))
    {
      UpdateVirtualJoystickPos();
    }
    else if (Input.GetMouseButtonUp(0))
    {
      inside.transform.position = virtualJoystickCenter;
    }
 
    //更新內(nèi)環(huán)位置(限制拖拽范圍)
    if (Input.GetMouseButton(0))
    {
      UpdateInsidePos();
    }
  }
 
  /// 
  /// 更新顯示
  /// 
  private void UpdateShow()
  {
    if (alwaysVisible)
    {
      inside.SetActive(true);
      outside.SetActive(true);
    }
    else if (alwaysVisible == false)
    {
      if (Input.GetMouseButtonDown(0))
      {
        inside.SetActive(true);
        outside.SetActive(true);
      }
      if (Input.GetMouseButtonUp(0))
      {
        inside.SetActive(false);
        outside.SetActive(false);
      }
    }
  }
 
  /// 
  /// 更新虛擬搖桿位置
  /// 
  private void UpdateVirtualJoystickPos()
  {
    //得到虛擬軸的中心位置
    virtualJoystickCenter = ScreenToWorld(Input.mousePosition);
 
    //設(shè)置虛擬軸的位置
    virtualJoystick.transform.position = virtualJoystickCenter;
  }
 
  /// 
  /// 更新內(nèi)環(huán)位置
  /// 
  private void UpdateInsidePos()
  {
    inside.transform.position = ScreenToWorld(Input.mousePosition);
    if (Vector3.Distance(inside.transform.position, virtualJoystickCenter) > maxDragLength)
    {
      Vector3 normalizedPos = (inside.transform.position - virtualJoystickCenter).normalized;
      inside.transform.position = normalizedPos * maxDragLength + virtualJoystickCenter;
    }
  }
 
  /// 
  /// 判斷是否為有效的范圍
  /// 
  /// 是否為有效的范圍
  private bool JudgeIsValidRange()
  {
    if (inside.activeInHierarchy)
    {
      return true;
    }
 
    Vector2 v = Input.mousePosition;
    if (v.x > Screen.width / 2 || v.x < 0)
    {
      return false;
    }
    else if (v.y > Screen.height / 2 || v.y < 0)
    {
      return false;
    }
    return true;
  }
 
  /// 
  /// 屏幕坐標(biāo)轉(zhuǎn)世界坐標(biāo)
  /// 
  /// 屏幕坐標(biāo)位置
  /// 相機(jī)
  /// 轉(zhuǎn)換后的世界坐標(biāo)
  public static Vector3 ScreenToWorld(Vector3 screenPos, Camera camera = null)
  {
    if (camera == null)
    {
      camera = Camera.main;
    }
    Vector3 _screenPos = new Vector3(screenPos.x, screenPos.y, -camera.transform.position.z);
    Vector3 v = camera.ScreenToWorldPoint(_screenPos);
    return v;
  }
 
  /// 
  /// 得到運(yùn)動(dòng)的方向和長度
  /// 
  /// 方向和長度
  public Vector3 GetDirAndLength()
  {
    return inside.transform.position - virtualJoystickCenter;
  }
}

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


分享文章:Unity實(shí)現(xiàn)虛擬搖桿的方法-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://weahome.cn/article/dhdgid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部