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 ...
随机推荐
- 【C++】atof()
转自:https://blog.csdn.net/zhaoyl03/article/details/8176387 atof 是ascII to float的缩写,它将ascII字符串转换为相应的单精 ...
- ionic3 热更新发布步骤记录
1.安装基本框架npm install -g ionic@latest npm install -g cordova ionic 验证版本号 ionic –version cordova -versi ...
- 位置式PID与增量式PID
//位置式PID float Kp; float Ki; float Kd; float eSum,e0,e1; float pid_control(float now,float target) { ...
- 【fork/join】java并发编程-fork/join示例
package com.chinamobile.epic.tako.common.graphite.query.sync.impl; import com.google.common.collect. ...
- 学习笔记之Fluent Python
Fluent Python by Luciano Ramalho https://learning.oreilly.com/library/view/fluent-python/97814919462 ...
- 八皇后(DFS)
题目描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的8 ...
- mysql 表映射为java bean 手动生成。
在日常工作中,一般是先建表.后建类.当然也有先UML构建类与类的层级关系,直接生成表.(建模)这里只针对先有表后有类的情况.不采用代码生成器的情况. 例如: 原表结构: ),)) BEGIN ); ) ...
- Idea中类上有叉的解决方法
idea中类的头上出现X解决办法 ctrl+alt+s 在弹出的菜单上选择Compiler下的Excludes 右边会有 移除掉,点击ok, 重启idea就可以了
- OpenCV代码:画出轮廓的外接矩形,和中心点
#include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include & ...
- input 选择框改变背景小技巧
最近在项目中遇到一个问题,想要改变input选择框的背景,然而,令我没有想到的是,竟然无法直接改变背景的颜色 通常情况下:我们都可以通过改变元素的 background-color 的值来改变元素的背 ...