【转】简单的虚拟摇杆控制移动(NGUI)
http://www.cnblogs.com/zhangbaochong/p/4928688.html
一、用NGUI创建虚拟摇杆贴图

先创建一个sprite作为背景叫做JoyStick 并添加一个BoxCollider,再创建一个sprite child作为虚拟摇杆中间的按钮,叫做button
二、通过虚拟摇杆获得x,y偏移值

1 using UnityEngine;
2 using System.Collections;
3
4 public class JoyStick : MonoBehaviour
5 {
6
7 private bool isPress = false;
8 private Transform button;
9
10 //从虚拟摇杆的得到的x,y偏移值-1到1之间
11 public static float h = 0;
12 public static float v = 0;
13 void Awake()
14 {
15 button = transform.FindChild("button");
16 }
17 void OnPress(bool isPress)
18 {
19 this.isPress = isPress;
20 if (!isPress)
21 {
22 button.localPosition = Vector2.zero;
23 h = 0;
24 v = 0;
25 }
26 }
27
28 void Update()
29 {
30 if (isPress)
31 {
32 Vector2 touchPos = UICamera.lastEventPosition - new Vector2(91, 91);
33 float distance = Vector2.Distance(Vector2.zero, touchPos);
34 if (distance > 73)//虚拟摇杆按钮不能超过半径
35 {
36 touchPos = touchPos.normalized * 73;
37 }
38 button.localPosition = touchPos;
39
40 h = touchPos.x / 73;
41 v = touchPos.y / 73;
42 }
43 }
44 }

三、通过偏移控制移动 主角添加了character controller

1 using UnityEngine;
2 using System.Collections;
3
4 public class PlayerMove : MonoBehaviour
5 {
6 private CharacterController cc;
7 public float speed = 3f;
8
9 void Awake()
10 {
11 cc = GetComponent<CharacterController>();
12 }
13
14 // Update is called once per frame
15 void Update ()
16 {
17 //键盘控制
18 float h = Input.GetAxis("Horizontal");
19 float v = Input.GetAxis("Vertical");
20
21 //虚拟摇杆控制
22 if (JoyStick.h != 0 || JoyStick.v != 0)
23 {
24 h = JoyStick.h;
25 v = JoyStick.v;
26 }
27
28 if (Mathf.Abs(h) > 0.1f || Mathf.Abs(v) > 0.1f)
29 {
30 Vector3 targetDir = new Vector3(h, 0, v);
31 transform.LookAt(targetDir + transform.position);
32 cc.SimpleMove(targetDir * speed);
33 }
34
35
36 }
37 }

【转】简单的虚拟摇杆控制移动(NGUI)的更多相关文章
- 简单的虚拟摇杆控制移动(NGUI)
一.用NGUI创建虚拟摇杆贴图 先创建一个sprite作为背景叫做JoyStick 并添加一个BoxCollider,再创建一个sprite child作为虚拟摇杆中间的按钮,叫做button 二.通 ...
- 【转】Unity3D学习日记(二)使用UGUI制作虚拟摇杆控制摄像机
http://blog.csdn.net/begonia__z/article/details/51178907 前天撸了一个简单的UGUI虚拟摇杆,今天我就利用前天做的虚拟摇杆做了一个简单的摄像机控 ...
- [Unity3D]Unity3D游戏开发之使用EasyTouch虚拟摇杆控制人物移动
大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei.今天呢,我们来一起学习在Unity3D中使用EasyTouch虚拟摇杆来控制人物移动.虽然Un ...
- Unity3d项目入门之虚拟摇杆
Unity本身不提供摇杆的组件,开发者可以使用牛逼的EasyTouch插件或者应用NGUI实现相关的需求,下面本文通过Unity自身的UGUI属性,实现虚拟摇杆的功能. 主参考 <Unity:使 ...
- 【转】NGUI版虚拟摇杆
http://blog.csdn.net/anyuanlzh/article/details/40107577 下面是我用nui实现的一个虚拟摇杆. 1,示图 2.代码如下,都有比较详细的注释,就不说 ...
- Unity3D学习(三):利用NGUI实现一个简单的左右摇杆
前言 小游戏Konster在测试的时候有热心玩家反馈左右移动手感不是很好,最主要的问题是:手指一旦按在手机屏幕的一个方向按钮上,向反方向滑动到另一个方向按钮上是不会改变玩家移动方向的. 具体如下图: ...
- NGUI版虚拟摇杆
以下是我用nui实现的一个虚拟摇杆. 1,示图 2.代码例如以下,都有比較具体的凝视.就不说明了. using UnityEngine; using System.Collections; using ...
- EasyTouch中虚拟摇杆的使用EasyJoystick
unity3d自带的虚拟摇杆显然没有EasyTouch好用 首先下载这个插件 http://pan.baidu.com/s/1hqJAbTa 下载完成后.导入到unity,可以看看里面的案例
- Unity3D学习笔记(二十三):事件接口、虚拟摇杆、层级管理和背包系统
事件接口 IDragHandler(常用):鼠标按下拖动时执行(只要鼠标在拖动就一直执行) IDropHandler:对象拖动结束时,如果鼠标在物体的范围内,执行一次(依赖于IDragHandler存 ...
随机推荐
- _EPROCESS结构简单了解!
_EPROCESS结构简单了解! lkd> dt _EPROCESSnt!_EPROCESS +0x000 Pcb : _KPROCESS +0x06c Pro ...
- 前端调试效率低?试试这10个“Chrome开发者工具”使用技巧
摘要:今天给大家分享一些使用“Chrome开发者工具”的小技巧.包括调试,优化页面渲染速度等.希望能提升Web开发人员的工作效率. 今天给大家分享一些使用“Chrome开发者工具”的小技巧.包括调试, ...
- CC2540开发板学习笔记(八)—— 看门狗
一.功能: 防止程序跑飞,使得系统重新进入工作状态,即一种复位操作吧. 但需要不停地喂狗= =(就是不断的执行某种操作),假如说你的程序跑到了不知道哪里去的错误时,即不会实现喂狗,就会发生复位,程序就 ...
- android 音频采集1
声道数一般表示声音录制时的音源数量或回放时相应的扬声器数量. 假设某通道的音频信号是采样率为8kHz,位宽为16bit,20ms一帧,双通道,则一帧音频数据的大小为: int size = 8000 ...
- 今年暑假不AC[HDU2037]
今年暑假不AC Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- eclipse插件开发--获取当前项目路径
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- Codeforces Round #213 (Div. 2) B. The Fibonacci Segment
#include <iostream> #include <algorithm> #include <vector> using namespace std; in ...
- topcoder SRM 594 DIV2 AstronomicalRecordsEasy
此题主要考查的是求最长公共子序列 设A[i]:A[j] = a:b = ac:bc B[ii]:B[jj] = c:d = ac:ad , 如果A[i]:A[j] = B[ii]:B[jj ...
- 【BZOJ】2761: [JLOI2011]不重复数字(set+巨水题+超坑题)
http://www.lydsy.com/JudgeOnline/problem.php?id=2761 太水了,不说了. 但是这格式错误我已经没话说了....行末不能有空格 #include < ...
- DWR入门教程
DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给 ...