简单的虚拟摇杆控制移动(NGUI)

一、用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 }
时间: 2024-08-07 05:46:28

简单的虚拟摇杆控制移动(NGUI)的相关文章

【转】简单的虚拟摇杆控制移动(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 : MonoBeh

Cocos2d-x《赵云要格斗》--虚拟摇杆控制精灵上下左右运动

本文将要实现一个横版格斗类游戏,并实现摇杆控制英雄上下左右运动.这里实现了能通过虚拟摇杆控制精灵的运动,而且能够改变精灵运动时的脸部朝向.之前看了好多人写虚拟摇杆,但是就是没写控制精灵的运动和脸朝向的.所以自己就想要写个文章好好讲下它的实现思路.好了,下面我们开始吧. 最终效果: cocos2d-x版本:2.2.5 工程环境:windows7+VS2010 打开方式:将工程放在cocos2d-x安装目录下的project文件夹下用VS打开 目录: 一.修改背景图片和窗口大小 二.添加虚拟摇杆 三

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

这是自己开发的第一次小游戏,有需要源代码和材料的邮箱留个,这里实现了能通过虚拟摇杆控制精灵的运动,而且能够改变精灵运动时的脸部朝向.之前看了好多人写虚拟摇杆,但是就是没写控制精灵的运动和脸朝向的.所以自己就想要写个文章好好讲下它的实现思路.好了,下面我们开始吧. 目录: 一.修改背景图片和窗口大小 二.添加虚拟摇杆 三.添加精灵并用摇杆控制精灵的运动 四.思路总结 一.修改背景图片和窗口大小 新建一个工程,工程名为HelloCpp.为了让效果更加好些,首先修改下窗口的大小,在main.cpp中改

[Unity3D]Unity3D游戏开发之使用EasyTouch虚拟摇杆控制人物移动

大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei.今天呢,我们来一起学习在Unity3D中使用EasyTouch虚拟摇杆来控制人物移动.虽然Unity3D内置了一个Joystick组件(事实上就是一个GUITexture和一个Js脚本文件啦),但是博主在实际使用的时候发现这个内置的Joystick存在无法适应屏幕大小的问题,所以博主在这里向大家推荐使用EasyTouch这个插件,通过这个插件.我们能够高速地在应用中集成虚拟摇杆功能,并且能够

NGUI版虚拟摇杆

以下是我用nui实现的一个虚拟摇杆. 1,示图 2.代码例如以下,都有比較具体的凝视.就不说明了. using UnityEngine; using System.Collections; using System.Collections.Generic; [ExecuteInEditMode] public class Joystick : MonoBehaviour { #region Delegate & Event public delegate void JoystickEventHa

Unity3D学习(三):利用NGUI实现一个简单的左右摇杆

前言 小游戏Konster在测试的时候有热心玩家反馈左右移动手感不是很好,最主要的问题是:比如手指一旦按在手机屏幕的右方向按钮上,向左滑动到另一个左移按钮上是不会改变玩家移动方向. 具体如下图: 刚开始我按下了→按钮,小怪兽行走到一半的时候我将拇指滑动到了←按钮,但是小怪兽并没有向左移动,然后就继续向右直到撞上尖刺死亡. 原因就是:我写的脚本只监听了按钮的按下和抬起事件.对于拇指在按钮上的滑动没有做响应处理. 所以我决定重写一个JoyStick脚本来控制小怪兽的移动方向. 实现思路 参考了这篇博

unity中虚拟摇杆的实现

实现效果: 实现: 使用NGUI添加虚拟摇杆背景和其子物体按钮,为按钮Attach  boxcollider和ButtionScript.为按钮添加如下脚本: 注意:其中的静态属性可以在控制物体移动的代码中访问用于控制. 1 using UnityEngine; 2 using System.Collections; 3 4 public class joyStickControl : MonoBehaviour { 5 6 public static float h=0; 7 public s

Unity用UGUI做虚拟摇杆

一.首先点击UI创建两个Image,将Image的Source Image改成自己想要的Texture即可,然后在Canvas下创建一空物体,将两个Image放在空物体下作为他的子对象: 然后为可以拖动的Image编写脚本,脚本如下:(有注释,就不多说了) using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems; public class JoyStick 

基于TINY4412的Andorid开发-------简单的LED灯控制【转】

本文转载自:http://www.cnblogs.com/pengdonglin137/p/3857724.html 基于TINY4412的Andorid开发-------简单的LED灯控制 阅读目录(Content) 一.编写驱动程序 二.编写代码测试驱动程序 三.编写HAL代码 四.编写Framework代码 五.编写JNI代码 六.编写App 参考资料: <Andriod系统源代码情景分析> <嵌入式Linux系统开发完全手册_基于4412_上册> 作者:彭东林 邮箱:[em