手机游戏的摇杆
来源:互联网 发布:预算软件 编辑:程序博客网 时间:2024/05/01 06:37
两个脚本:
第一个:挂在调整好位置的摇杆图片上:
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;
/// <summary>
/// 挂在摇杆图片上
/// </summary>
public class JoyStickL : MonoBehaviour
{
Transform rPoint; //中心点的变换组件
public Vector3 offsetL; //偏移量
private Vector2 originalPos; //初始位置
private Touch[] touches; //屏幕上触控点数组
public bool isMoveL; //是否开始触控
private int touchIndex = -1; //触控数组下标
private Vector2 tempDir; //临时偏移量
void Awake()
{
rPoint = transform;
}
void Start()
{
originalPos = transform.position;//屏幕坐标位置
}
void Update()
{
//得到触点数组
touches = Input.touches;
//只有一个触点时
if (touches.Length == 1)
{
touchIndex = 0;
}
//如果出现大于1个触点
else if (touches.Length > 1)
{
//多个触点中距离近的为当前的控制触点
if (Vector3.SqrMagnitude(touches[0].position - originalPos) < Vector3.SqrMagnitude(touches[1].position - originalPos))//长度的平方(速度快),只读
{
touchIndex = 0;
}
else
{
touchIndex = 1;
}
}
//有触点开启
if (touches.Length > 0)
{
//如果触点不是取消或者抬起
if (Input.GetTouch(touchIndex).phase != TouchPhase.Canceled && Input.GetTouch(touchIndex).phase != TouchPhase.Ended)
{
//距离遥感范围内
if (Vector3.SqrMagnitude(touches[touchIndex].position - originalPos) <= 100*100*3.14f)//像素数
{
//遥感开始控制,计算偏移量
OutOffset(touchIndex);
//开启遥控
isMoveL = true;
}
//超过距离但是遥感开启状态
else if (isMoveL)
{
ReturnOffset(touchIndex);
}
}
//如果抬起的手指为控制遥感的手指,则遥感归位
else
{
rPoint.position= originalPos;
offsetL = Vector3.zero;
isMoveL = false;
touchIndex = -1;
}
}
}
/// <summary>
/// 摇杆控制方法
/// </summary>
/// <param name="i"></param>
void OutOffset(int index)
{
//红点位置追踪
rPoint.position= touches[index].position;
//距离过小则视为不偏移
if (Vector3.SqrMagnitude(touches[index].position - originalPos) <=5)
{
offsetL = Vector3.zero;
}
else
{
//给偏移量赋值
offsetL = new Vector3(touches[index].position.x - originalPos.x, 0, touches[index].position.y - originalPos.y);
offsetL = offsetL.normalized;//归一化(只读),转为长度为1的向量
}
}
/// <summary>
/// 超过范围时,遥感控制方法
/// </summary>
/// <param name="i"></param>
void ReturnOffset(int index)
{
//更新偏移向量
tempDir = touches[index].position - originalPos;
//更新红点的位置
rPoint.position = originalPos + (tempDir.normalized) * 20;
//给偏移量赋值
offsetL = new Vector3(touches[index].position.x - originalPos.x, 0, touches[index].position.y - originalPos.y);
offsetL = offsetL.normalized;
}
}
第二个:挂在需要摇杆控制的角色身上
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class CharactMoveController : MonoBehaviour
{
GameObject StickL;//摇杆
public float rotateSpeed = 1f;//旋转速度
public float moveSpeed = 100f;//移动速度
private void Start()
{
StickL = GameObject.Find("Cav_UI").transform.FindChild("Im_Joy_Left").gameObject;
}
void FixedUpdate()
{
LeftJoyStick();
}
/// <summary>
/// 摇杆
/// </summary>
void LeftJoyStick()
{
bool TouchL = StickL.GetComponent<JoyStickL>().isMoveL;//获取左摇杆图片上的JoyStick组件的isMoveL
if (TouchL)//如果isMoveL=true
{
Vector3 offsetL = StickL.GetComponent<JoyStickL>().offsetL;//定义V3型变量offsetL,赋值为左摇杆的offsetL
if (offsetL != Vector3.zero)//如果offsetL不等于0
{
//transform.position += new Vector3(transform.forward.x, 0, transform.forward.z).normalized * offset.z* Time.deltaTime * moveSpeed;
transform.Translate(Vector3.forward.normalized * offsetL.z * Time.deltaTime * moveSpeed);//向z轴正方向归一化乘以offsetL的z乘以移动速度乘以时间
//transform.eulerAngles += new Vector3(0, offset.x, 0) * Time.deltaTime * rotateHorSpeed;
transform.Rotate(Vector3.up.normalized * offsetL.x * Time.deltaTime * rotateSpeed);//绕y轴正方向归一化乘以offsetL的x乘以旋转速度乘以时间
}
}
}
}
- 手机游戏的摇杆
- Android手机游戏摇杆
- 手机游戏绘制触屏虚拟摇杆的几何算法
- Uniyt手机游戏-摇杆-Easy Touch-细节教程
- cocos2d-x游戏摇杆的实现方法
- iPhone游戏中模拟摇杆的教程
- Unity—UGUI游戏摇杆的制作
- 游戏杆,摇杆,joystick,游戏手柄的一个.NET库
- Android手机摇杆
- (libgdx小结)游戏摇杆
- libgdx 游戏摇杆
- liggdx 游戏摇杆类
- 360度游戏摇杆
- 索尼爱立信手机摇杆失灵的维修方法
- android 如何使用surfaceview绘制类似游戏手柄的摇杆?
- AS3.0做游戏的360度摇杆
- 对游戏开发中虚拟摇杆的封装
- Unity3D中关于游戏摇杆的实现方法
- Android 生成带logo的二维码
- 网页首图抓住用户注意力的要点
- java HttpExchange返回中文报错 too many bytes to write to stream
- QT5.2中文乱码解决问题
- [Brainfuck]基于Whitespace语言保密思想的BF语句构建-(无字天书)
- 手机游戏的摇杆
- iOS实现排序
- 防火墙配置--多出口
- Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock
- 如何生动有趣的入门线性代数
- sessionStorage与localStorage
- java在命令行下编译带有package命名空间的项目
- ANDROID N 分屏设置
- mvs设计模式