前天撸了一个简单的UGUI虚拟摇杆,今天我就利用前天做的虚拟摇杆做了一个简单的摄像机控制器,主要看看UGUI虚拟摇杆是否可以完美的控制移动和旋转。(PS:主要是为接下来的项目做技术测试),手游版的CF的角色控制器也是利用设个方式进行摄像机的控制,利用双摇杆进行角色的前进和旋转,如果你玩过PSV或者是用过手柄控制器就知道啥意思了,接下来我们就来实现这个功能需求。

首先我们先做两个简单的虚拟摇杆,如下图所示:

因为我们是要实现摄像机的移动,因此我就直接在MainCamera上添加脚本,手游CF左边虚拟摇杆是用来控制角色移动,右边是控制角色的射击以及角色的旋转,那么我们现在我们来实现个功能。因为功能是否简单所以我就直接上代码了。代码如下所示:

using System;
using UnityEngine;
using System.Collections;public class ControlCamera : MonoBehaviour
{public float moveSpeed = 100.0f;public float rotateSpeed = 1;public float minAngleY = -30f;public float maxAngleY = 30f;public ScrollCircle joyStick1;public ScrollCircle joyStick2;private Vector2 angleVector2 = Vector2.zero;// Update is called once per framevoid Update (){UpdateCamera();}/// <summary>/// 更新摄像机位置以及旋转角度/// </summary>public void UpdateCamera(){if (!joyStick1.GetIsOnEndDrag() && joyStick1.GetOffsetVector3() != Vector3.zero){this.transform.localPosition = new Vector3(this.transform.localPosition.x + (joyStick1.GetOffsetVector3().x*moveSpeed),this.transform.localPosition.y,this.transform.localPosition.z + (joyStick1.GetOffsetVector3().y*moveSpeed));}if (!joyStick2.GetIsOnEndDrag() & joyStick2.GetOffsetVector3() != Vector3.zero){angleVector2.x += joyStick2.GetOffsetVector3().x*rotateSpeed;angleVector2.y -= joyStick2.GetOffsetVector3().y*rotateSpeed;angleVector2.y = ClampAngle(angleVector2.y, minAngleY, maxAngleY);Quaternion rotateAngle = Quaternion.Euler(angleVector2.y, angleVector2.x, 0);this.transform.localRotation = rotateAngle;angleVector2.y = ClampAngle(angleVector2.y, minAngleY, maxAngleY);}}/// <summary>/// 限制选择角度/// </summary>/// <param name="angle"></param>/// <param name="min"></param>/// <param name="max"></param>/// <returns></returns>static float ClampAngle(float angle, float min, float max){if (angle < -360)angle += 360;if (angle > 360)angle -= 360;return Mathf.Clamp(angle, min, max);}
}

因为代码很简单所以我只是备注了一下函数用法,如果有不懂可以私聊我。

代码可能写的不好,欢迎大神们指导教育0.0

2016/4/18 15:46

刚刚发现有仔细看代码的时候发现一个严重bug,Y轴旋转180度后你会发现所有的移动都反了,这样影响到了操作了因此我们需要把这个严重的bug修复了,这里我只把UpdateCamera函数放出来,修改如下:

 public void UpdateCamera(){if (!joyStick1.GetIsOnEndDrag() && joyStick1.GetOffsetVector3() != Vector3.zero){movePos.x = joyStick1.GetOffsetVector3().x*moveSpeed;movePos.z = joyStick1.GetOffsetVector3().y*moveSpeed;float y = transform.localRotation.eulerAngles.y;movePos = Quaternion.Euler(0, y, 0)*movePos;Vector3 currentPoint = new Vector3(transform.localPosition.x + movePos.x, transform.localPosition.y,transform.localPosition.z + movePos.z);this.transform.localPosition = currentPoint;}if (!joyStick2.GetIsOnEndDrag() & joyStick2.GetOffsetVector3() != Vector3.zero){angleVector2.x += joyStick2.GetOffsetVector3().x*rotateSpeed;angleVector2.y -= joyStick2.GetOffsetVector3().y*rotateSpeed;angleVector2.y = ClampAngle(angleVector2.y, minAngleY, maxAngleY);Quaternion rotateAngle = Quaternion.Euler(angleVector2.y, angleVector2.x, 0);this.transform.localRotation = rotateAngle;angleVector2.y = ClampAngle(angleVector2.y, minAngleY, maxAngleY);}}

----Begonia

Unity3D学习日记(二)使用UGUI制作虚拟摇杆控制摄像机相关推荐

  1. 我的Unity3D学习日记-06(自己动手制作FlappyBird)

    自从上次跟着敲了官方示例拾荒者之后,开始对Unity制作2D游戏感兴趣了起来,虽然本文标题叫做Unity3D学习日记.但是Unity其实本来名字里是没有3D这俩字的--很有名的雨血前传 蜃楼就是一个使 ...

  2. 【Unity】UGUI超级简单的摇杆制作,摇杆控制物体移动

                [Unity]UGUI超级简单的摇杆制作,摇杆控制物体移动 目录 1.效果展示 2.博客介绍 3.具体内容和思路 (1)摇杆制作 (2)移动控制 4.资源包下载 5.推送 6. ...

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

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

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

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

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

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

  6. 【Unity3d学习】粒子光环的制作——粒子编程初体验

    写在前面 Unity3d学习制作的实验资料包括本次实验都在老师的课程网站上:传送门 视频地址:传送门 实验项目文件在Github上面:Github传送门 实验参考博客:感谢指导! Unity3D学习笔 ...

  7. Unity3D学习日记(十一)UI滑动条和全景图控制

    最近忙着学UE4去了,没啥时间弄unity的玩意,公司老板说PC的VR做完了还要附送一个全景APP给他们,最近也没想到好写的玩意,就把这个UI滑动条和全景图的控制简单案例拿出来写写.(PS:大神们请绕 ...

  8. Unity用UGUI做虚拟摇杆

    一.首先点击UI创建两个Image,将Image的Source Image改成自己想要的Texture即可,然后在Canvas下创建一空物体,将两个Image放在空物体下作为他的子对象: 然后为可以拖 ...

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

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

最新文章

  1. 《App架构师实践指南》:移动开发的进阶指南
  2. Q1手机全球份额反超苹果,美国对华为的“双重恐惧”再度加深
  3. 错误sudo: pip: command not found解决方案
  4. TIS教程04-客户端
  5. Hibernate基本概念 (3)
  6. 95-40-120-java.util.concurrent-线程-AbstractEventExecutor
  7. stderr和stdout详细解说
  8. 拉格朗日(lagrange)插值及其MATLAB程序
  9. android 跨进程 android:process,Android跨进程通信技术-多进程模式的运行机制
  10. 链表简介(二)——在单向链表中插入节点
  11. SPI总线接口与简单配置
  12. 数据结构_十字链表(C语言)
  13. Docker学习笔记 1
  14. SQL 分组求和+行转列
  15. OMRON继电器基础讲解
  16. 硬盘格式转换:MBR转换到GPT怎么转?
  17. 关于显示器显示效果的调节(色温,6轴)
  18. Vue组件通信(父传子、子传父、兄弟通信)
  19. p牛java安全漫谈学习笔记(2)_反序列化与urldns链(基础)
  20. /etc/passwd文件详解

热门文章

  1. 华为ensp网页配置AC+AP无线联网
  2. 基于easyexcel的MySQL百万级别数据的excel导出功能
  3. 2023-2024最新计算机专业毕业设计选题推荐大全
  4. 全国高校计算机考试二级成绩查询,全国计算机二级考试成绩查询
  5. 18.VS编译时出现对路径的访问被拒绝解决办法
  6. Codeforces Round #636 (Div. 3) C.Alternating Subsequence
  7. preventDefault与stopPropagation的作用
  8. 【Python】实现爬虫(完整版),爬取天气数据并进行可视化分析
  9. python垃圾邮件过滤_垃圾邮件过滤器Python newbi
  10. socket 通信 封装 协议 基础