Unity手游之路<五>虚拟摇杆之Unity内置插件实现
2014-06-25 17:30
519 查看
手机游戏,尤其是mmo类的有,都少不了虚拟游戏摇杆。今天我们来学习如何利用Unity3d自带的摇杆组件,实现利用摇杆来控制角色的移动。
今天所用到的例子参考了网上的一个教程(http://www.unitymanual.com/thread-5189-1-1.html),原文用javascript实现了。我这里用c#来实现
(本文可以随意分享,请注明出处/article/1588734.html,谢谢!)
具体步骤
1.导入Character Controller组件,主要是用到其中的角色模型
2.导入Standard Assets(Mobile)组件,里面包含了Joystick组件
3.创建一个Gui Texture,命名为Joystick。设置它的材料Texture 为 Joystick Thumb
设置它的Pixel Inset .x,y Width,Hight
4.为Joystick添加脚本Joystick.cs
5.创建一个地形。不会的同学,可以直接引用到源码中的
6.将角色控制器中的Bip001加到Player上,初始化状态为idle
7.为Main Camera 添加 Smooth Follow脚本(角色控制器脚本中包含),使得摄像机可以跟随人物移动
8.为Main Camera添加自定义脚本 PlayerController.cs脚本
[csharp]
view plaincopyprint?
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour
{
//角色
public GameObject player;
//摇杆
public Joystick joystick;
void Update()
{
//摇杆没有被触发
if (joystick.tapCount <= 0)
{
return;
}
//获取摇杆偏移
var joyPositionX = joystick.position.x;
var joyPositionY = joystick.position.y;
if (joyPositionY != 0 || joyPositionX != 0)
{
//设置角色的朝向(朝向当前坐标+摇杆偏移量)
player.transform.LookAt(new Vector3(player.transform.position.x + joyPositionX, player.transform.position.y, player.transform.position.z + joyPositionY));
//移动玩家的位置(按朝向位置移动)
player.transform.Translate(Vector3.forward * Time.deltaTime * 5);
//播放奔跑动画
player.animation.Play("run");
}
else
{
//播放待机动画
player.animation.Play("idle");
}
}
}
最终的效果图:
Joystick.cs
代码比较多,就不详细列出。
主要思路:记录触摸的位置,记录相关的偏移量。与此相关联的是GUI Texture组件。
总结
官方自带的摇杆组件比较简单,可以基本实现简单的功能。但是,也存在很多的局限,比如更换外观比较繁琐,无法自适应屏幕的大小确定相对位置,基于GUI layer。为此,下节我们将介绍一个功能更加强大的摇杆组件Easy Touch 3,敬请期待!有任何问题欢迎一起探讨ken@iamcoding.com
源码地址
http://pan.baidu.com/s/1GMnyQ
更多
今天所用到的例子参考了网上的一个教程(http://www.unitymanual.com/thread-5189-1-1.html),原文用javascript实现了。我这里用c#来实现
(本文可以随意分享,请注明出处/article/1588734.html,谢谢!)
具体步骤
1.导入Character Controller组件,主要是用到其中的角色模型
2.导入Standard Assets(Mobile)组件,里面包含了Joystick组件
3.创建一个Gui Texture,命名为Joystick。设置它的材料Texture 为 Joystick Thumb
设置它的Pixel Inset .x,y Width,Hight
4.为Joystick添加脚本Joystick.cs
5.创建一个地形。不会的同学,可以直接引用到源码中的
6.将角色控制器中的Bip001加到Player上,初始化状态为idle
7.为Main Camera 添加 Smooth Follow脚本(角色控制器脚本中包含),使得摄像机可以跟随人物移动
8.为Main Camera添加自定义脚本 PlayerController.cs脚本
[csharp]
view plaincopyprint?
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour
{
//角色
public GameObject player;
//摇杆
public Joystick joystick;
void Update()
{
//摇杆没有被触发
if (joystick.tapCount <= 0)
{
return;
}
//获取摇杆偏移
var joyPositionX = joystick.position.x;
var joyPositionY = joystick.position.y;
if (joyPositionY != 0 || joyPositionX != 0)
{
//设置角色的朝向(朝向当前坐标+摇杆偏移量)
player.transform.LookAt(new Vector3(player.transform.position.x + joyPositionX, player.transform.position.y, player.transform.position.z + joyPositionY));
//移动玩家的位置(按朝向位置移动)
player.transform.Translate(Vector3.forward * Time.deltaTime * 5);
//播放奔跑动画
player.animation.Play("run");
}
else
{
//播放待机动画
player.animation.Play("idle");
}
}
}
using UnityEngine; using System.Collections; public class PlayerController : MonoBehaviour { //角色 public GameObject player; //摇杆 public Joystick joystick; void Update() { //摇杆没有被触发 if (joystick.tapCount <= 0) { return; } //获取摇杆偏移 var joyPositionX = joystick.position.x; var joyPositionY = joystick.position.y; if (joyPositionY != 0 || joyPositionX != 0) { //设置角色的朝向(朝向当前坐标+摇杆偏移量) player.transform.LookAt(new Vector3(player.transform.position.x + joyPositionX, player.transform.position.y, player.transform.position.z + joyPositionY)); //移动玩家的位置(按朝向位置移动) player.transform.Translate(Vector3.forward * Time.deltaTime * 5); //播放奔跑动画 player.animation.Play("run"); } else { //播放待机动画 player.animation.Play("idle"); } } }
最终的效果图:
Joystick.cs
代码比较多,就不详细列出。
主要思路:记录触摸的位置,记录相关的偏移量。与此相关联的是GUI Texture组件。
总结
官方自带的摇杆组件比较简单,可以基本实现简单的功能。但是,也存在很多的局限,比如更换外观比较繁琐,无法自适应屏幕的大小确定相对位置,基于GUI layer。为此,下节我们将介绍一个功能更加强大的摇杆组件Easy Touch 3,敬请期待!有任何问题欢迎一起探讨ken@iamcoding.com
源码地址
http://pan.baidu.com/s/1GMnyQ
更多
相关文章推荐
- Unity手游之路<五>虚拟摇杆之Unity内置插件实现
- Unity 虚拟摇杆之Unity内置插件实现
- Unity手游之路<五>虚拟摇杆之Unity内置插件实现
- Unity手游之路<五>虚拟摇杆之Unity内置插件实现
- < Unity 3D专栏 >实现游戏对象与对象之间通信
- [原]Unity手游之路<三> 基于Unity+Java的聊天室源码
- Unity 实现Log实时输出到屏幕或控制台上<一>
- Unity手游之路<六>游戏摇杆之Easy Touch 3教程
- Box2d源码学习<五>b2Timer、b2Draw和b2Settings的实现
- <Unity UGUI> 在Unity5 的UGUI系统上实现图片的遮罩
- Unity Asset(3)虚拟摇杆插件 EasyTouch
- UGUI实现Unity虚拟摇杆
- <Unity 3D工作笔记>脚本中勾选与取消勾选脚本,代码中的实现!
- Unity手游之路<六>游戏摇杆之Easy Touch 3教程
- <五>基于淘宝Fourinone实现分布式锁指南和demo
- <Unity UGUI><EasyTouch> 使用EasyTouch, 摇杆在Dynamic模式下,点击UI控件也会弹出的问题解决
- [原]Unity手游之路<三> 基于Unity+Java的聊天室源码
- < Unity 3D专栏 >NGUI插件基础教程(一)
- Unity手游之路<六>游戏摇杆之Easy Touch 3教程
- unity中虚拟摇杆的实现