参数属性设置

  1. 控制器根直径为60,半径为30;总直径为214,半径为107。
    根直径为60像素,半径即为30像素;虚拟摇杆总直径为214像素,半径为107像素。点击位置距离中心点的距离在30像素以内的识别为对虚拟摇杆进行移动,在30-107像素范围内为方向控制。
  2. 移动距离:
    // x:132– -132
    // y:200– -294
    像素在界面中移动的相对坐标限度,超过限度的虚拟摇杆将停留在边界。
  3. CountrolDirection对应方向:
    //0:top 1:bottom 2:left 3:right
    CountrolDirection为类的属性,通过设置属性的方式来改变方向,同时方便其他类取得方向。
public enum HeroDistance { Top,Bottom,Left,Right,None}

参数定义

    private GameObject ControlPanel;//获取自身private bool isMouseDown;//鼠标是否按下private bool isFollowMouse;//是否跟随鼠标移动public GameObject[] ControlDirection=new GameObject[4];//创建一个GameObject数组,得到4个不同方向的Imageprivate Canvas canvas;//获取UGUI的根面板private RectTransform rectTransform;//获取UGUI根面板的相对坐标系private HeroDistance heroDistance = HeroDistance.None;//初始化方向,为None。

Awake方法初始化设置

    void Awake() {ControlPanel = this.transform.Find("ControlPanel").gameObject;canvas = GameObject.Find("Canvas").GetComponent<Canvas>();rectTransform = canvas.transform as RectTransform;}

检测鼠标的按下与抬起

为检测鼠标的按下与抬起,需要实现两个接口,分别是:IPointerDownHandler,IPointerUpHandler。
为实现接口而创建的两个类:

    #region 检测鼠标按下抬起public void OnPointerDown(PointerEventData eventData) {isMouseDown = true;}public void OnPointerUp(PointerEventData eventData) {isMouseDown = false;}#endregion

其他方法通过获取isMouseDown对象来确定是否按下。

放大和缩小底盘动画

采用itween运动插件

    #region 放大控件-Larger(GameObject);缩小控件-Narrow(GameObject)//当Scale不为1时进行放大if (go.transform.localScale.x < 1 || go.transform.localScale.y < 1) {Hashtable parameters = new Hashtable();//创建Hash表parameters.Add("scale", new Vector3(1, 1, 1));//运动的Scaleparameters.Add("time", 0.2f);//运动时间parameters.Add("ignoretimescale", true);//不受time.timescale的控制iTween.ScaleTo(go,parameters);} }//运动方式与放大刚好相反private void Narrow(GameObject go){if (go.transform.localScale.x > 0 || go.transform.localScale.y > 0) {Hashtable parameters = new Hashtable();parameters.Add("scale", new Vector3(0, 0, 1));parameters.Add("time", 0.2f);parameters.Add("ignoretimescale", true);iTween.ScaleTo(go, parameters);}}#endregion

跟随鼠标移动方法

#region 跟随鼠标移动- FollowMouse()private void FollowMouse() {//如果检测到鼠标按下if (isMouseDown) {//如果正在跟随鼠标移动if (isFollowMouse) {//通过ReturnMouseDownPos()方法获取鼠标移动到的位置Vector2 pos = ReturnMouseDownPos();//设置边界,在边界内if (pos.x <= 210f && pos.x >= -220f && pos.y <= 300f && pos.y >= -380f){//设置虚拟摇杆的位置this.transform.localPosition = new Vector3(pos.x, pos.y, this.transform.localPosition.z);}else{//在边界外float newX = pos.x, newY = pos.y;if (pos.x > 210f){newX = 210f;}else if(pos.x< -220f){newX = -220f;}if (pos.y > 300f){newY = 300f;}else if(pos.y< -380f){newY = -380f;}this.transform.localPosition = new Vector3(newX, newY, this.transform.localPosition.z);}}}}#endregion

【四方向型】虚拟摇杆 C#代码部分(1)--基本参数与动画方法相关推荐

  1. 【四方向型】虚拟摇杆的构造及素材

    结构 虚拟摇杆的结构分为3个部分 1. 虚拟摇杆的"根",位于中心,作用是确定虚拟摇杆的位置,同时该摇杆在设计时要求在"根"部增加功能,即按住该部分可以移动虚拟 ...

  2. Cocos2d-x虚拟摇杆控制精灵上下左右运动----之游戏开发《赵云要格斗》(1)

      这里是Evankaka的博客,欢迎大家前面讨论与交流------      转载请注明出处http://blog.csdn.net/evankaka/article/details/4204350 ...

  3. Cocos2d-x虚拟摇杆控制精灵上下左右运动之————“赵云要格斗”(1)

    转载请注明出处http://blog.csdn.net/evankaka/article/details/42043509 有需要源代码和材料的邮箱留个,这里实现了能通过虚拟摇杆控制精灵的运动,而且能 ...

  4. 二丶Android如何自定义一个可移动的飞行虚拟摇杆?

    摘要: 上次我们自定义了一个固定位置摇杆,此摇杆无法调整杆量,且位置固定,这次我们就来定义一个可以自由调整杆量和变换位置的虚拟摇杆. 下面就写一下需要实现此虚拟摇杆的步骤: 一丶初始化资源 我们需要美 ...

  5. cocos2dx游戏开发学习——虚拟摇杆(8方向)讲解

    写这篇博客的目的主要是记录一下 虚拟摇杆的实现过程.虚拟摇杆一般分文四方向和八方向,也主要根据项目需求来决定.直接进入主题吧. 先上效果图: 方向的思路分析 看图,说先我们可以将8个方向在坐标系中画出 ...

  6. Unity实战篇:实现虚拟摇杆控制人物(Easy Touch 5.X插件)

    先上一张效果图 1.先导入Easy Touch 5.X插件 https://download.csdn.net/download/qq_15020543/10718144 强烈建议大家去Unity 商 ...

  7. EasyTouch5 之 Joystick 虚拟摇杆

    一.EasyTouch 资源结构 EasyTouchBundle [插件的根目录] |-EasyTouch [插件核心,核心功能的实现,偏向底层] |-EasyTouchControls [插件控制器 ...

  8. 《Cocos Creator游戏实战》虚拟摇杆实现

    虚拟摇杆实现 摇杆布局实现 摇杆功能实现 用摇杆控制主角 该功能已收录在Many Widgets插件中,使用Cocos Creator 3.x版本的小伙伴可以用该插件快速生成摇杆. 插件地址:http ...

  9. 360度虚拟摇杆控制机器人前进后退转弯(一)

    项目需求 最近做一个项目,要求使用虚拟摇杆控制机器人设备前进后退转弯,整个过程的思路不算复杂,写篇文章记录下大致思路 (1)黄色圆不动时候 小车速度为0 (2)拖动摇杆 拖动距离越大 小车速度越大 距 ...

最新文章

  1. 怎么让电脑运行速度变快_分享几种电脑运行速度慢的解决方法_windows7教程
  2. Google 已正式结束对 Eclipse Android 的支持
  3. Long Long Message
  4. 在source insight 中添加系统字体
  5. H5新标签--语义化标签
  6. python用opencv实现图片的美白磨皮_OpenCV 磨皮-Python
  7. 安装mysql电脑开机蓝屏_电脑开机蓝屏怎么解决。
  8. 爱荷华大学计算机科学专业,爱荷华大学计算机科学本科爱荷华大学计算机科学本科.pdf...
  9. 【Lucene】挖掘相关搜索词
  10. 三维立体动画制作技巧
  11. 通过命令行清理360安全卫士批处理
  12. Error opening data file Tesseract-OCR\tessdata/eng.traineddata问题 解决
  13. 国内银行应用软件项目外包模式探讨(转)
  14. P3646 [APIO2015]巴厘岛的雕塑
  15. 蓝桥杯---Cowboys---DP
  16. logit和probit的区别
  17. linux centos服务器安全初级防御
  18. 访问他人mysql数据库_怎么连接访问他人的MYSQL数据库?
  19. 汇编实现一位数加减乘除
  20. 华硕B550M主板新装CentOS无网络

热门文章

  1. 赠书五本《零基础学机器学习》
  2. oracle数据库导入dmp文件,两种方法
  3. Smurf攻击的原理
  4. JVM-前端编译与优化
  5. 通过sql语句查询oracle版本信息
  6. 控制SHLIXIN上海立新液压比例阀放大器
  7. Resuming debugger: error during debugging loop: TypeError: firstViewRangeElement is null
  8. 利用AFL进行模糊测试
  9. laravel 服务容器,容器概念
  10. 按申万三级行业分类计算个股的标准正态累计分布值