服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - unity实现虚拟摇杆控制Virtual Joystick

unity实现虚拟摇杆控制Virtual Joystick

2022-09-01 11:22代码黑洞_ C#

这篇文章主要为大家详细介绍了unity实现虚拟摇杆控制Virtual Joystick,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了unity实现虚拟摇杆控的具体代码,供大家参考,具体内容如下

unity实现虚拟摇杆控制Virtual Joystick

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using UnityEngine;
using UnityEngine.UI;
 
public class TouchJoystick : MonoBehaviour
{
 
  public GameObject go;//需要通过虚拟摇杆控制的目标物体
  public float moveSpeed = 3;//移动速度
 
  public Image touchPoint;//摇杆轴对象
 
  private Vector3 OriginalPos_TP;//摇杆轴的初始位置
  private RectTransform rectTransform_TP;//摇杆轴的位置组件
 
  private float radius;//摇杆轴移动的最大半径
 
  void Start()
  {
    radius = this.GetComponent<RectTransform>().rect.width*0.5f;
    rectTransform_TP = touchPoint.GetComponent<RectTransform>();
    OriginalPos_TP = rectTransform_TP.position;
  }
 
  void Update()
  {
    //第一次触摸屏幕时,整个虚拟摇杆的位置更新
    if (Input.GetMouseButtonDown(0))
    {
      this.GetComponent<RectTransform>().position = Input.mousePosition;
      OriginalPos_TP = rectTransform_TP.position;
    }
 
    if (Input.GetMouseButton(0))
    {
      //取得触摸点与虚拟轴初始点的距离
      float distance = Vector3.Distance(Input.mousePosition, OriginalPos_TP);
      //取得一个初始轴点指向触摸点的向量
      Vector3 pos = Input.mousePosition - OriginalPos_TP;
      //如果距离大于可移动半径
      if (distance > radius)
        rectTransform_TP.position = OriginalPos_TP + pos.normalized*radius;//设置轴点到最大半径位置
      else
        rectTransform_TP.position = Input.mousePosition;//否则轴点在当前触摸位置
      
      //以(0,1,0)为参考点,计算单位轴向量与之夹角
      float angle = Vector3.Angle(new Vector3(0, 1, 0), new Vector3(pos.normalized.x, pos.normalized.y, 0));
      //移动物体
      go.transform.Translate(new Vector3(0, 0, pos.normalized.magnitude*moveSpeed)*Time.deltaTime);
      //更新控制物体的旋转与轴向方向一致
      if (pos.normalized.x > 0)
        go.transform.rotation = Quaternion.AngleAxis(angle, Vector3.up);
      else
        go.transform.rotation = Quaternion.AngleAxis(-angle, Vector3.up);
    }
    else
      rectTransform_TP.position = OriginalPos_TP;//没有触摸时回到初始位置
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/sinat_34791632/article/details/78215919

延伸 · 阅读

精彩推荐
  • C#C#解析Lrc歌词文件过程详解

    C#解析Lrc歌词文件过程详解

    这篇文章主要为大家详细介绍了C#解析Lrc歌词文件过程,很有趣的解析过程,感兴趣的小伙伴们可以参考一下...

    波谷9922021-11-26
  • C#轻松学习C#的哈希表

    轻松学习C#的哈希表

    轻松学习C#的哈希表,对C#的哈希表感兴趣的朋友可以参考本篇文章,帮助大家更灵活的运用C#的哈希表。...

    丿木呈广予口贝11212021-11-04
  • C#C#开发可播放摄像头及任意格式视频的播放器

    C#开发可播放摄像头及任意格式视频的播放器

    这篇文章主要介绍了C#开发可播放摄像头及任意格式视频的播放器 ,在WPF中,借助Vlc.DotNet调用VLC类库,实现视频播功能。需要的朋友可以参考下...

    kiba5184942022-08-01
  • C#C#实现主窗体最小化后出现悬浮框及双击悬浮框恢复原窗体的方法

    C#实现主窗体最小化后出现悬浮框及双击悬浮框恢复原窗体的方

    这篇文章主要介绍了C#实现主窗体最小化后出现悬浮框及双击悬浮框恢复原窗体的方法,涉及C#窗体及鼠标事件响应的相关技巧,具有一定参考借鉴价值,需要的...

    我心依旧12082021-10-22
  • C#WPF如何自定义TabControl控件样式示例详解

    WPF如何自定义TabControl控件样式示例详解

    这篇文章主要给大家介绍了关于WPF如何自定义TabControl控件样式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习...

    小明GG3932022-02-23
  • C#浅谈C#中对引用类型的误解

    浅谈C#中对引用类型的误解

    这篇文章主要介绍了浅谈C#中对引用类型的误解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

    qylost8562022-08-01
  • C#C#实现文章添加内链的方法

    C#实现文章添加内链的方法

    文章添加内链有利于提高读者阅读体验,有利于搜索引擎优化,提升页面浏览量,下面小编通过两种方法说下用c#实现文章添加内链的方法,一起看看吧...

    realyrare10382022-02-27
  • C#C#实现用栈求逆序的方法示例

    C#实现用栈求逆序的方法示例

    这篇文章主要介绍了C#实现用栈求逆序的方法,涉及C#数据结构中栈的压入与取出相关操作技巧,需要的朋友可以参考下...

    a7719485246422022-01-17