EasyJoyStick使用以及两种操作杆 EasyJoyStick的使用方法,简单的不能再简单 Hedgehog Team-》Easy Touch -》Add Easy Touch For C#

EasyJoyStick使用以及两种操作杆
EasyJoyStick的使用方法,简单的不能再简单

Hedgehog Team-》Easy Touch -》Add Easy Touch For C#
Hedgehog Team-》Easy Touch -》Extensions-》Adding A New Joystick

配置如图:

然后看一下配置,我喜欢掌控性强一些,于是只利用到JoyStick传回来的值,也就是一个Vector2向量。
在PlayerController也就是控制器脚本上加一个引用,然后在Update中接受值即可。

代码: Vector2 axis = joystick.JoystickAxis; 

如果想要实现动态操作杆,只需要把 DynamicJoystick 口 挑上就行。
别的没什么难点了。

如果想限制动态操作杆的有效区域设置器Free Area即可。

两种移动方式解析

(1)直观移动方式:

转向立刻生效,指哪走哪
这种比较简单,直接获取方向向量,乘以速度即可


Vector2 axis = joy_stick.JoystickAxis;

float delta_x = axis.x * current_speed * Time.deltaTime;
float delta_y = axis.y * current_speed * Time.deltaTime;

transform.Translate( delta_x, delta_y,   0);            
      

(2)渐变转向移动方式:
在这种方式下,如果你向前走,突然把遥杆向后拉,物件不会直接向后移动,而是会转一个弯,逐渐转向到目标方向,然后移动。
Vector3 normal = (Vector3)axis.normalized;

float cos_theta = Vector3.Dot(player_object.transform.up, normal);

float theta = Mathf.Acos(cos_theta);
 float rota = theta * axis.magnitude * ((real_speed > player_data.normal_speed + 0.1f) ? player_data.turn_cof_normal : player_data.turn_cof_acc);

//防抖动
if (theta > 0.1f) 
{
Vector3 old = transform.eulerAngles;

if (Vector3.Cross(transform.up, normal).z > 0)
{
old.z += rota;
}
else 
{
old.z -= rota;
}

transform.eulerAngles = old;
}


transform.position += transform.up * real_speed * Time.deltaTime;
上面的代码,本质上讲,把移动分解成向前移动,和向拉杆指向方向,逐渐转向。

这里有两个要点,
1是计算操作杆方向和当前物件移动方向的夹角。
利用向量夹角公式计算,也就是通过两个向量的点积计算。

2是计算物件应该延那个方向进行转向,换句话说,需要判断物件应该顺时针转过去,还是要逆时针转过去
这里如果不做处理,那么转向的时候,会出现问题,比如你明明只想向左转60度,却向右转了300度

这里利用到了叉乘的概念,两个向量叉乘,其z轴的值的正负,可以判断两个向量的顺时针,逆时针相对角度关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.1 vector

表结构的数组实现随机访问快速尾插动态调整所占内存空间#include<vector>从0开始计数创建vector对象的三种方法&#xff1a; 1. vector<int> v;2. vector<int> v(10); //默认值为03. vecotr<double> v(10,8.6); //为每个元素指定初始值尾插&#xff1a…

文件系统管理 之 文件和目录访问权限设置

一、文件和目录权限概述 在linux中的每一个文件或目录都包含有访问权限&#xff0c;这些访问权限决定了谁能访问和如何访问这些文件和目录。 通过设定权限可以从以下三种访问方式限制访问权限&#xff1a;只允许用户自己访问&#xff1b;允许一个预先指定的用户组中的用户访问&…

Web渗透实验:基于Weblogic的一系列漏洞

1. 攻击机windows10 192.168.2.104 2. 靶机ip: 192.168.2.109(linux Ubantu) 192.168.2.111(windows2008R264位) 第一步&#xff1a;启动靶机服务 分别为linux和windows windows环境搭建&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/16KyYb1v1rP9uJ6-5MBotVw   提取…

9 月 19 日,腾讯云安全中心监测到  Apache Tomcat 修复了2个严重级别的漏洞, 分别为: 信息泄露漏洞(CVE-2017-12616)、远程代码执行漏洞(CVE-2017-12615

9 月 19 日&#xff0c;腾讯云安全中心监测到 Apache Tomcat 修复了2个严重级别的漏洞&#xff0c; 分别为&#xff1a; 信息泄露漏洞&#xff08;CVE-2017-12616&#xff09;、远程代码执行漏洞&#xff08;CVE-2017-12615&#xff09;&#xff0c;在某些场景下&#xff0c;攻…

2.0 STL泛型编程

Standard Template Library 在命名空间std中定义了常用的数据结构和算法 三种类型的组件&#xff1a; 容器&#xff1a; ——vector、string ——set、multiset、map、multimap ——list ——bitset ——stack ——deque、queue、priority_queue 迭代器 算法&…

SQL联合更新

update CCTDB..Area_Infoset ParentStrb.ParentStrfrom CCTDB..Area_Info a inner join TempArea bon a.AreaId b.AreaId转载于:https://www.cnblogs.com/davidgu/archive/2012/08/10/2631289.html

集合之ArrayList(含JDK1.8源码分析)

一、ArrayList的数据结构 ArrayList底层的数据结构就是数组&#xff0c;数组元素类型为Object类型&#xff0c;即可以存放所有类型数据。我们对ArrayList类的实例的所有的操作(增删改查等)&#xff0c;其底层都是基于数组的。 定义底层数据结构&#xff1a;Object[] elementDat…

2.2 string

字符数组的封装 基本操作与vector很像&#xff0c;它们内部采用的都是数组结构 #include<string> 创建string对象&#xff1a; string s; 给string对象赋值&#xff1a; 方式一&#xff1a;s"i love coding"; 方式二&#xff1a; char a[256]; scanf(&qu…

Unity3D 自动打包整个项目(以AssetBundle实现)

需求&#xff1a; 在移动开发中&#xff0c;手动控制资源的加载、释放和热更新&#xff0c;是很有必要的。 而Unity通过AssetBundle可以实现该需求&#xff0c;但是如果项目资源多起来的话一个个手动打包成AssetBundle则很麻烦。 而本文正为此提供一套一键打包的方案。 资源分…

Android复制assets目录下的图片到内存

转自&#xff1a;http://www.chenwg.com/android/android%E5%A4%8D%E5%88%B6assets%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E5%9B%BE%E7%89%87%E5%88%B0%E5%86%85%E5%AD%98.html 有些Android应用需要一些初始化数据&#xff0c;但是考虑到国内这种龟速网络和高昂的网络流量费用&…

Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑(转载)

转自&#xff1a;https://www.cnblogs.com/ibingshan/p/10334471.html Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑 前言 基于 python27 的 pyc 很容易被反编译&#xff0c;于是想到了pyd&#xff0c;加速运行&#xff0c;安全保护 必要准备 安装cython&#xff1a;…

2.3 set

#include<set> 红黑树&#xff08;Red-Black Tree&#xff09;&#xff0c;一种平衡二叉检索树。 对于插入相同键值的情况忽略处理。 set主要用于快速检索 高效的插入和删除 multiset、map、multimap都是平衡二叉检索树。 创建set集合&#xff1a; set<int> s…

一、创建Assetbundle 在unity3d开发的游戏中,无论模型,音频,还是图片等,我们都做成Prefab,然后打包成Assetbundle,方便我们后面的使用,来达到资源的更新。

一、创建Assetbundle 在unity3d开发的游戏中&#xff0c;无论模型&#xff0c;音频&#xff0c;还是图片等&#xff0c;我们都做成Prefab&#xff0c;然后打包成Assetbundle&#xff0c;方便我们后面的使用&#xff0c;来达到资源的更新。 一个Assetbundle可以打包一个模型&…

【JS】我的JavaScript学习之路(2)

3.从JavaScript页面解析过程看执行顺序 代码(test.html)&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/x…

Codeforces 862D. Mahmoud and Ehab and the binary string 【二分】(交互)

<题目链接> 题目大意&#xff1a; 有一个长度为n(n<1000)的01串&#xff0c;该串中至少有一个0和一个1&#xff0c;现在由你构造出一些01串&#xff0c;进行询问&#xff0c;然后系统会给出你构造的串与原串的 Hamming distance &#xff0c;现在要求你按照步骤进行…

王者荣耀提取攻略

1. 王者荣耀安装后&#xff0c;就将模型等资源解压到SD卡目录里&#xff0c;我们需要找到这个目录。模型资源存储在SD卡中&#xff0c;路径为&#xff1a;【/SDCard/Android/data/com.tencent.tmgp.sgame/files/Resources/AssetBundle/】 2. 2 所有英雄的资源包都在这个目…

2.4 multiset

#include<set> multiset与set的唯一不同&#xff1a;允许插入重复的元素。 在插入元素、删除元素、查找元素上与set 有区别。 multiset元素的插入&#xff1a; multiset<int> ms; ms.insert(11); ms.insert(11); //插入两个11&#xff0c;遍历时同样有两个11。…

Exchange ActiveSyn身份验证类型

http://www.exchangecn.com/html/exchange2010/20110125_316.html 配置 Exchange ActiveSync 身份验证 时间:2011-01-25 11:01来源:Exchange中文站 作者:Exchange中文站 点击:3045次ActiveSync 身份验证是客户端和服务器验证其身份以进行数据传输的过程&#xff0c;本文以示例的…

HotSpot 虚拟机垃圾回收算法实现

作为使用范围最广的虚拟机之一HotSpot&#xff0c;必须对垃圾回收算法的执行效率有严格的考量&#xff0c;只有这样才能保证虚拟机高效运行 枚举根节点 从可达性分析中从 GC Roots 节点找引用链这个操作为例&#xff0c;可以作为 GC Roots 的节点主要在全局性的引用&#xff08…

Java NIO编写Socket服务器的一个例子

最近一直在忙着JAVA NIO的知识&#xff0c;花了一下午的时间&#xff0c;总算写出了一个可以运行的程序&#xff0c;废话少说&#xff0c;上代码&#xff01; Java代码&#xff1a; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerS…