unity3d 虚拟摇杆怎么控制飞行摇杆震动?

Unity3D 虚拟摇杆(之一)
我的图书馆
Unity3D 虚拟摇杆(之一)
想使用Unity3D在手机上实现虚拟摇杆的功能,通过拖动左侧虚拟摇杆控制人物移动,在手机上运行效果如下:
初始时考虑使用官方Joystick,但是使用GUITexture时与游戏中其他功能冲突.
使用官方Joystick的JavaScript版本参考雨松MOMO博客,链接:C#版本代码链接:
最后选择使用插件EasyJoystick来实现这个功能.插件Demo链接:第一视角:第三视角:插件购买链接: 答应过插件原作者写一篇中文教程,教程如下:英文官方教程链接:英文官方编码目录链接:
1.按照下面的指示创建一个虚拟摇杆:
添加后Unity3D游戏预览窗口如下:
然后发现面板中多了下面两项,创建一个空物体,命名为JoystickManager控制虚拟摇杆事件,如下:
一定要记得第二项"Joystick"物体的名字与JoystickManager.cs代码中的名字一致,下面的步骤会有提示.
查看Joystick属性面板,如下:
通过下面的面板,可以将虚拟摇杆更改为自己的图片资源.
在JoystickManager中添加官方Demo中的示例代码:
using UnityE&&
using System.C&&
/// &summary&&&
/// Joystick event&&
/// &/summary&&&
public class JoystickEvent : MonoBehaviour {&&
& & void OnEnable(){&&
& && &&&EasyJoystick.On_JoystickMove += On_JoystickM&&
& && &&&EasyJoystick.On_JoystickMoveEnd += On_JoystickMoveE&&
& & void OnDisable(){&&
& && &&&EasyJoystick.On_JoystickMove -= On_JoystickM&&
& && &&&EasyJoystick.On_JoystickMoveEnd -= On_JoystickMoveE&&
& & void OnDestroy(){&&
& && &&&EasyJoystick.On_JoystickMove -= On_JoystickM& && &
& && &&&EasyJoystick.On_JoystickMoveEnd -= On_JoystickMoveE&&
& & void On_JoystickMoveEnd(MovingJoystick move){&&
& && &&&if (move.joystickName == "Move_Turn_Joystick"){&&
& && && && &animation.CrossFade("idle");&&
& && &&&}&&
& & void On_JoystickMove( MovingJoystick move){&&
& && &&&if (move.joystickName == "Move_Turn_Joystick"){&&
& && && && &if (Mathf.Abs(move.joystickAxis.y)&0 && Mathf.Abs(move.joystickAxis.y)&0.5){&&
& && && && && & animation.CrossFade("walk");&&
& && && && && && &
& && && && &}& &&&
& && && && &else if (Mathf.Abs(move.joystickAxis.y)&=0.5){&&
& && && && && & animation.CrossFade("run");& &
& && && && &}&&
& && &&&}&&
}&&复制代码
注意事项:将此代码中的move.joystickName修改为上面红色标注的名字(hierarchy第二项的名字"Joystick")官方示例控制的是3D模型,而我这里需要虚拟摇杆控制2D角色移动,共有上下左右四个方向.
修改代码如下:
将虚拟摇杆分为向左或向右拖拽,向左拖拽又分为左上,左,左下.这需要判断虚拟摇杆在x/y轴偏移量的大小,如上代码所示为虚拟摇杆向左拖拽逻辑,
根据偏移量大小播放向左/向上/向下动画,虚拟摇杆同时控制角色的position.向右拖拽时同理.这样虚拟摇杆控制角色移动就完成了.
如有任何建议请发邮件至
原文链接:
馆藏&21399
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢unity如何让手柄震动
unity如何让手柄震动
要评论请先&或者&
很简单。。。
&
(如果商用。可以支持下。写着玩免谈)
:很简单。。。
&
(如果商用。可以支持下。写着玩免谈) 商用哇,求赐教
虽然不是很懂 但是 感觉是要用native plugin
:虽然不是很懂 但是 感觉是要用native plugin !!!!。
:虽然不是很懂 但是 感觉是要用native plugin 什么native plugin。。。。。。
&
==========
要DirectX 力反馈
:什么native plugin。。。。。。
&
==========
要DirectX 力反馈 DirectInput?
:DirectInput? PC USB &用DINPUT
XBOX360 用XINPUT
======
两种规格
:PC USB &用DINPUT
XBOX360 用XINPUT
======
两种规格 我的是pc usb,能否提供点资料,谢谢
:什么native plugin。。。。。。
&
==========
要DirectX 力反馈 native plugin 能够让unity和c/c++d的库通信。虽然是用directx 但是 已经有人写好插件了 直接用吧没有更多推荐了,
不良信息举报
举报内容:
真Unity3d_人物摇杆操作
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!unity怎么实现游戏手柄震动?_百度知道
unity怎么实现游戏手柄震动?
unity怎么实现游戏手柄震动?我只稍微懂点C#,求插件,或者地址,感谢!
您的回答被采纳后将获得:
系统奖励15(财富值+成长值)+难题奖励30(财富值+成长值)
我有更好的答案
不知道是不是和手机震动一样,你可以试试 Handheld.Vibrate ();
不是,游戏手柄跟手机不一样,谢谢!
不是,游戏手柄跟手机不一样,谢谢!
什么手柄?没有相关sdk吗?不同型号也不一样才对
调用手机震动器api如下:Handheld.Vibrate(); //手机的震动效果。
为您推荐:
其他类似问题
您可能关注的内容
高锰酸钾的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
查看: 1139|回复: 2
Unity3D研究院之IOS自定义游戏摇杆与飞机平滑的移动
本帖为抢楼帖,欢迎抢楼!&
5762/1000排名<font color="#FF昨日变化12主题帖子积分
熟悉之中, 积分 762, 距离下一级还需 238 积分
熟悉之中, 积分 762, 距离下一级还需 238 积分
蛮牛币6687
在线时间90 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
& &通过一个小例子和大家讨论 中如何自定义一个漂亮的全触摸游戏摇杆。unity3d 的标准资源中已经帮助我们封装了一个游戏摇杆脚本,所以实现部分的代码可以完全借助它的,具体调用需要我们自己来。
//////////////////////////////////////////////////////////////
// Joystick.js
// Penelope iPhone Tutorial
// Joystick creates a movable joystick (via GUITexture) that
// handles touch input, taps, and phases. Dead zones can control
// where the joystick input gets picked up and can be normalized.
// Optionally, you can enable the touchPad property from the editor
// to treat this Joystick as a TouchPad. A TouchPad allows the finger
// to touch down at any point and it tracks the movement relatively
// without moving the graphic
//////////////////////////////////////////////////////////////
RequireComponent( GUITexture )
// A simple class for bounding how far the GUITexture will move
class Boundary
& & var min : Vector2 = Vector2.
& & var max : Vector2 = Vector2.
static private var joysticks : Joystick[];& && && && && && &&&// A static collection of all joysticks
static private var enumeratedJoysticks : boolean =
static private var tapTimeDelta : float = 0.3;& && && && && & // Time allowed between taps
var touchPad :& && && && && && && && && && && && & // Is this a TouchPad?
var touchZone : R
var deadZone : Vector2 = Vector2.& && && && && && && && &// Control when position is output
var normalize : boolean =& && && && && && && && && &&&// Normalize output after the dead-zone?
var position : Vector2;& && && && && && && && && && && && & // [-1, 1] in x,y
var tapCount :& && && && && && && && && && && && && && &&&// Current tap count
private var lastFingerId = -1;& && && && && && && && && && &&&// Finger last used for this joystick
private var tapTimeWindow :& && && && && && && && && & // How much time there is left for a tap to occur
private var fingerDownPos : Vector2;
private var fingerDownTime :
private var firstDeltaTime : float = 0.5;
private var gui : GUIT& && && && && && && && && && &&&// Joystick graphic
private var defaultRect : R& && && && && && && && && && &&&// Default position / extents of the joystick graphic
private var guiBoundary : Boundary = Boundary();& && && && &// Boundary for joystick graphic
private var guiTouchOffset : Vector2;& && && && && && && && &// Offset to apply to touch input
private var guiCenter : Vector2;& && && && && && && && && & // Center of joystick
function Start()
& & // Cache this component at startup instead of looking up every frame
& & gui = GetComponent( GUITexture );
& & // Store the default rect for the gui, so we can snap back to it
& & defaultRect = gui.pixelI& &
& & defaultRect.x += transform.position.x * Screen.// + gui.pixelInset.x; // -&&Screen.width * 0.5;
& & defaultRect.y += transform.position.y * Screen.// - Screen.height * 0.5;
& & transform.position.x = 0.0;
& & transform.position.y = 0.0;
& & if ( touchPad )
& && &&&// If a texture has been assigned, then use the rect ferom the gui as our touchZone
& && &&&if ( gui.texture )
& && && && &touchZone = defaultR
& && &&&// This is an offset for touch input to match with the top left
& && &&&// corner of the GUI
& && &&&guiTouchOffset.x = defaultRect.width * 0.5;
& && &&&guiTouchOffset.y = defaultRect.height * 0.5;
& && &&&// Cache the center of the GUI, since it doesn't change
& && &&&guiCenter.x = defaultRect.x + guiTouchOffset.x;
& && &&&guiCenter.y = defaultRect.y + guiTouchOffset.y;
& && &&&// Let's build the GUI boundary, so we can clamp joystick movement
& && &&&guiBoundary.min.x = defaultRect.x - guiTouchOffset.x;
& && &&&guiBoundary.max.x = defaultRect.x + guiTouchOffset.x;
& && &&&guiBoundary.min.y = defaultRect.y - guiTouchOffset.y;
& && &&&guiBoundary.max.y = defaultRect.y + guiTouchOffset.y;
function Disable()
& & gameObject.active =
& & enumeratedJoysticks =
function ResetJoystick()
& & // Release the finger control and set the joystick back to the default position
& & gui.pixelInset = defaultR
& & lastFingerId = -1;
& & position = Vector2.
& & fingerDownPosition = Vector2.
& & if ( touchPad )
& && &&&gui.color.a = 0.025;
function IsFingerDown() : boolean
& & return (lastFingerId != -1);
function LatchedFinger( fingerId : int )
& & // If another joystick has latched this finger, then we must release it
& & if ( lastFingerId == fingerId )
& && &&&ResetJoystick();
function Update()
& & if ( !enumeratedJoysticks )
& && &&&// Collect all joysticks in the game, so we can relay finger latching messages
& && &&&joysticks = FindObjectsOfType( Joystick );
& && &&&enumeratedJoysticks =
& & var count = Input.touchC
& & // Adjust the tap time window while it still available
& & if ( tapTimeWindow & 0 )
& && &&&tapTimeWindow -= Time.deltaT
& && &&&tapCount = 0;
& & if ( count == 0 )
& && &&&ResetJoystick();
& && &&&for(var i : int = 0;i & i++)
& && && && &var touch : Touch = Input.GetTouch(i);
& && && && &var guiTouchPos : Vector2 = touch.position - guiTouchO
& && && && &var shouldLatchFinger =
& && && && &if ( touchPad )
& && && && &{
& && && && && & if ( touchZone.Contains( touch.position ) )
& && && && && && &&&shouldLatchFinger =
& && && && &}
& && && && &else if ( gui.HitTest( touch.position ) )
& && && && &{
& && && && && & shouldLatchFinger =
& && && && &}& && &
& && && && &// Latch the finger if this is a new touch
& && && && &if ( shouldLatchFinger && ( lastFingerId == -1 ?? lastFingerId != touch.fingerId ) )
& && && && &{
& && && && && & if ( touchPad )
& && && && && & {
& && && && && && &&&gui.color.a = 0.15;
& && && && && && &&&lastFingerId = touch.fingerId;
& && && && && && &&&fingerDownPos = touch.
& && && && && && &&&fingerDownTime = Time.
& && && && && & }
& && && && && & lastFingerId = touch.fingerId;
& && && && && & // Accumulate taps if it is within the time window
& && && && && & if ( tapTimeWindow & 0 )
& && && && && && &&&tapCount++;
& && && && && & else
& && && && && & {
& && && && && && &&&tapCount = 1;
& && && && && && &&&tapTimeWindow = tapTimeD
& && && && && & }
& && && && && & // Tell other joysticks we've latched this finger
& && && && && & for ( var j : Joystick in joysticks )
& && && && && & {
& && && && && && &&&if ( j != this )
& && && && && && && && &j.LatchedFinger( touch.fingerId );
& && && && && & }
& && && && &}& && && && && &
& && && && &if ( lastFingerId == touch.fingerId )
& && && && &{
& && && && && & // Override the tap count with what the iPhone SDK reports if it is greater
& && && && && & // This is a workaround, since the iPhone SDK does not currently track taps
& && && && && & // for multiple touches
& && && && && & if ( touch.tapCount & tapCount )
& && && && && && &&&tapCount = touch.tapC
& && && && && & if ( touchPad )
& && && && && & {
& && && && && && &&&// For a touchpad, let's just set the position directly based on distance from initial touchdown
& && && && && && &&&position.x = Mathf.Clamp( ( touch.position.x - fingerDownPos.x ) / ( touchZone.width / 2 ), -1, 1 );
& && && && && && &&&position.y = Mathf.Clamp( ( touch.position.y - fingerDownPos.y ) / ( touchZone.height / 2 ), -1, 1 );
& && && && && & }
& && && && && & else
& && && && && & {
& && && && && && &&&// Change the location of the joystick graphic to match where the touch is
& && && && && && &&&gui.pixelInset.x =&&Mathf.Clamp( guiTouchPos.x, guiBoundary.min.x, guiBoundary.max.x );
& && && && && && &&&gui.pixelInset.y =&&Mathf.Clamp( guiTouchPos.y, guiBoundary.min.y, guiBoundary.max.y );
& && && && && & }
& && && && && & if ( touch.phase == TouchPhase.Ended ?? touch.phase == TouchPhase.Canceled )
& && && && && && &&&ResetJoystick();
& && && && &}
& & if ( !touchPad )
& && &&&// Get a value between -1 and 1 based on the joystick graphic location
& && &&&position.x = ( gui.pixelInset.x + guiTouchOffset.x - guiCenter.x ) / guiTouchOffset.x;
& && &&&position.y = ( gui.pixelInset.y + guiTouchOffset.y - guiCenter.y ) / guiTouchOffset.y;
& & // Adjust for dead zone
& & var absoluteX = Mathf.Abs( position.x );
& & var absoluteY = Mathf.Abs( position.y );
& & if ( absoluteX & deadZone.x )
& && &&&// Report the joystick as being at the center if it is within the dead zone
& && &&&position.x = 0;
& & else if ( normalize )
& && &&&// Rescale the output after taking the dead zone into account
& && &&&position.x = Mathf.Sign( position.x ) * ( absoluteX - deadZone.x ) / ( 1 - deadZone.x );
& & if ( absoluteY & deadZone.y )
& && &&&// Report the joystick as being at the center if it is within the dead zone
& && &&&position.y = 0;
& & else if ( normalize )
& && &&&// Rescale the output after taking the dead zone into account
& && &&&position.y = Mathf.Sign( position.y ) * ( absoluteY - deadZone.y ) / ( 1 - deadZone.y );
单击Create 创建一个GUI Texture,命名为Joy ,它用来显示游戏摇杆,如下图所示将摇杆的图片资源,与摇杆的脚本连线赋值给Joy.&&Pixel Inset 中可以设置摇杆的显示位置与显示宽高。
到这一步 build and run 就可以在iPhone上看到这个游戏摇杆,并且可以通过触摸它,360度平滑过度。
在屏幕中绘制一个飞机,通过游戏摇杆去控制飞机的移动。
创建一个脚本,命名为Main.js 如下图所示&&将 Main.js 、joy、plan 分别 绑定在Main Camera 上。
moveJoystick.position.x;
moveJoystick.position.y;
这两个值是非常重要的两个信息,它们的取值范围是 -1 到 +1 ,表示 用户触摸摇杆的位置, 上 下 左 右 的信息。
[AppleScript] 纯文本查看 复制代码
//游戏摇杆对象
var moveJoystick : J
//飞机的贴图
var plan : T
//飞机在屏幕中的坐标
var x = 0;
var y = 0;
//避免飞机飞出屏幕,分别是X、Y最大坐标,最小坐标是0、0
var cross_x = 0;
var cross_y = 0;
//飞机移动的速度
var planSpeed = 20;
function Start() {
& & //初始化赋值
& & x = 100;
& & y = 100;
& & cross_x = Screen.width -&&plan.
& & cross_y = Screen.height -&&plan.
function Update () {
& & //得到游戏摇杆的反馈信息,得到的值是 -1 到 +1 之间
& &&&var touchKey_x =&&moveJoystick.position.x;
& &&&var touchKey_y =&&moveJoystick.position.y;
& &&&//摇杆向左
& &&&if(touchKey_x == -1){
& && && &x -= planS
& &&&//摇杆向右
& &&&else if(touchKey_x == 1){
& && && &x += planS
& &&&//摇杆向上
& && &if(touchKey_y == -1){
& && && &y += planS
& &&&//摇杆向下
& &&&else if(touchKey_y == 1){
& && && &y -= planS
& &&&//防止飞机飞出屏幕,出界检测
& &&&if(x & 0){
& && && &x = 0;
& &&&}else if(x & cross_x){
& && && &x = cross_x;
& && &if(y & 0){
& && && &y = 0;
& &&&}else if(y & cross_y){
& && && &y = cross_y;
function OnGUI () {
&&//将飞机绘制在屏幕中
&&GUI.DrawTexture(Rect(x,y,128,128),plan);&&
导出 build and run&&看看在iPhone 上的效果,通过触摸游戏摇杆可以控制飞机的移动啦,不错吧,哇咔咔~~
最后欢迎各位盆友可以和MOMO一起讨论开发,最近感冒的盆友越来越多,大家要多多注意身体健康噢。哇咔咔~~~ 附上工程的下载地址,Xcode项目我就不上传了,须要的自己导出。
unity3d摇杆;unity3d自带摇杆
每日推荐:
132/50排名<font color="#FF昨日变化34主题帖子积分
注册看看, 积分 32, 距离下一级还需 18 积分
注册看看, 积分 32, 距离下一级还需 18 积分
在线时间8 小时
太厉害了。。。。。。。。。。。。。。。。。
每日推荐:
253/150排名<font color="#FF昨日变化26主题帖子积分
初来乍到, 积分 53, 距离下一级还需 97 积分
初来乍到, 积分 53, 距离下一级还需 97 积分
在线时间15 小时
来自Mobile---
不错不错……
每日推荐:}

我要回帖

更多关于 unity3d 屏幕震动 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信