Unity3D 移动摇杆处理
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using System;
public class JoyStickController : MonoBehaviour,IDragHandler,IEndDragHandler,IBeginDragHandler{ public float maxDragDistance = 50f;
public Vector3 direction;
public Vector3 initPos;
public Vector3 dragPos;
// Use this for initialization
private static JoyStickController _instance; public static JoyStickController instance
{
get
{
return _instance;
}
}
public Vector3 GetDirction()
{
return direction.normalized;
}
void Awake()
{
_instance = this;
}
void Start () {
initPos = transform.position;
Debug.Log(initPos);
} // Update is called once per frame
void Update () { } public void OnBeginDrag(PointerEventData eventData)
{
//Debug.Log(Input.mousePosition);
dragPos = Input.mousePosition;
Debug.Log("OnBeginDrag");
} public void OnDrag(PointerEventData eventData)
{
float dis = Vector3.Distance(dragPos, Input.mousePosition);
direction = Input.mousePosition - dragPos;
if(dis>=maxDragDistance)
{ dis = maxDragDistance; }
transform.localPosition = direction.normalized * dis; Debug.Log("OnDrag"); }
public void OnEndDrag(PointerEventData eventData)
{
this.transform.position = initPos;
direction = Vector3.zero; Debug.Log("OnEndDrag");
Debug.Log(transform.position); }
}
移动处理
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class HatControl : MonoBehaviour
{
public GameObject effect;
public float fMoveSpeed = 5.0f;
private Vector3 rawPosition;
private Vector3 hatPosition;
private float fMaxWidth; private Vector3 deltaPos;
// Start is called before the first frame update
void Start()
{
Vector3 sceenPos = new Vector3(Screen.width, 0, 0);
Vector3 moveWidth = Camera.main.ScreenToWorldPoint(sceenPos);
float fBallWidth = GetComponent<Renderer>().bounds.extents.x; fMaxWidth = moveWidth.x - fBallWidth; deltaPos = Camera.main.transform.position - transform.position;
} private void Update()
{
Vector3 headPos = gameObject.transform.localPosition;
Vector3 normal = JoyStickController.instance.GetDirction(); float tickTime = Time.deltaTime * fMoveSpeed;
gameObject.transform.localPosition = new Vector3(headPos.x + normal.x * tickTime, headPos.y + normal.y * tickTime, headPos.z); Camera.main.transform.position = transform.position + deltaPos;
} private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.CompareTag("ball"))
{
GameObject newEffect = Instantiate(effect, transform.position, transform.rotation);
newEffect.transform.parent = transform; Destroy(newEffect, 1.0f);
Destroy(collision.gameObject);
} }
}
demo下载地址:
链接:https://pan.baidu.com/s/1sQBm2dPJLEUFB5A5zWPQ2A 密码:3jcg
Unity3D 移动摇杆处理的更多相关文章
- Unity3D 响应摇杆
if (Input.GetKeyUp(KeyCode.Joystick1Button0)) { Debug.Log("Joystick1Button0"); } if (Input ...
- [Unity3D]Unity3D游戏开发之使用EasyTouch虚拟摇杆控制人物移动
大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei.今天呢,我们来一起学习在Unity3D中使用EasyTouch虚拟摇杆来控制人物移动.虽然Un ...
- Unity3D学习(三):利用NGUI实现一个简单的左右摇杆
前言 小游戏Konster在测试的时候有热心玩家反馈左右移动手感不是很好,最主要的问题是:手指一旦按在手机屏幕的一个方向按钮上,向反方向滑动到另一个方向按钮上是不会改变玩家移动方向的. 具体如下图: ...
- Unity3d项目入门之虚拟摇杆
Unity本身不提供摇杆的组件,开发者可以使用牛逼的EasyTouch插件或者应用NGUI实现相关的需求,下面本文通过Unity自身的UGUI属性,实现虚拟摇杆的功能. 主参考 <Unity:使 ...
- 【转载】Unity3D研究院之IOS自定义游戏摇杆与飞机平滑的移动
移动开发游戏中使用到的触摸游戏摇杆在iPhone上是非常普遍的,毕竟是全触摸屏手机,今天MOMO 通过一个小例子和大家讨论Unity3D 中如何自定义一个漂亮的全触摸游戏摇杆. 值得高兴 ...
- Unity3D 摄像机的Transform通过摇杆输出的方向
要解决的问题是:摄像机的方向不固定,当摇杆向前(0,1)推时,主角要往摄像机的朝向(忽略Y方向)走,当摇杆往右(1,0)推的时,主角朝摄像机的右方向 /// <summary> /// 摄 ...
- Unity3D学习笔记(二十三):事件接口、虚拟摇杆、层级管理和背包系统
事件接口 IDragHandler(常用):鼠标按下拖动时执行(只要鼠标在拖动就一直执行) IDropHandler:对象拖动结束时,如果鼠标在物体的范围内,执行一次(依赖于IDragHandler存 ...
- unity3d easytouch计算摇杆旋转角度以及摇杆八方向控制角色
在写第三人称控制的时候,一开始在电脑测试是用WASD控制角色 后来需要发布到手机上,于是就加了一个摇杆 键盘控制角色的代码已经写好了,角色八方向移动 如果按照传统的大众思路来控制的话,是达不到我想要的 ...
- Unity3d 摇杆奖励
单个单元: publicclass RockerSingle : MonoBehaviour { // 枚举.类别 RockerType rockerType; //是否有效,最上面的为无效,即为f ...
随机推荐
- Spark流处理调优步骤
总体运行状况: 这里的每个批处理任务间隔是10s一次,所以Total Delay是14s,那么对于下一个批处理任务来说就是延迟了14 - 10 = 4s . Total Delay - 每个批处 ...
- PostgreSQL获取所有表名、字段名、字段类型、注释
转载自:http://blog.csdn.net/cicon/article/details/51577655 获取表名及注释: select relname as tabname,cast(obj_ ...
- 阅读 video on-screen display v6.0笔记
阅读 video on-screen display v6.0笔记 关于axi总线时钟的区分 需要弄清楚的是aclk, aclken, aresetn 信号是和video 有关的,axi4-lite的 ...
- Python 语言之 map/reduce
1.相关文献 大名鼎鼎的Google论文<MapReduce: Simplified Data Processing on Large Clusters> 对应的中文翻译<MapRe ...
- Docker镜像常用命令
镜像(image)是Docker三大核心概念中最重要的,是运行容器的前提. Docker运行容器前需要本地存在对应的镜像,如果镜像没保存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Dock ...
- PAT 甲级 1041 Be Unique (20 分)
1041 Be Unique (20 分) Being unique is so important to people on Mars that even their lottery is desi ...
- is,as,类库
is和as运算符: 所有类型的基类 object类型 - 基类:所有类型的基类,就类似是整个生物圈的生物类,是个大的概念 object o1 = new Random(); //object可以承载R ...
- 工具函数(获取url , 时间格式化,随机数)
(function(window,$){ function Tools() { } // url Tools.prototype.readUrlToParams = function() { var ...
- 关于163发邮件报错535 Error:authentication failed解决方法
关于发邮件报错535 Error:authentication failed解决方法 调用163邮箱服务器来发送邮件,我们需要开启POP3/SMTP服务,这时163邮件会让我们设置客户端授权码,这个授 ...
- 1. redis安装(windows)
Redis在windows下安装过程 转载自(http://www.cnblogs.com/M-LittleBird/p/5902850.html) 一.下载windows版本的Redis 去官网 ...