2013-10-07 16:58:25 u010584213 阅读数 121
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4637 人正在学习 去看看 张刚

近期笔者研究unity3D移动开发,然后打算做虚拟摇杆。初始时考虑使用官方Joystick,但是使用GUITexture时与NGUI插件有冲突,最后选择EasyJoystick做摇杆,那是相当简单了,呵呵,话不多说,看步骤:

 

1导入Import你的EasyTouch包。导入完成后,菜单栏会多出一项:Hedgehog Team。这就是咱安装的插件了。package中有好多例子及说明,可以看一下。实际开发项目可以删之。只留下Plugins文件夹就好了。

2.上图,能看懂吧。

 

这样Hierarchy中就会多出来三个组件:EasyTouch  ,new joystick,Singleton of VirtualScreen

 

3.最后一步,我们需要做的只是修改new joystick中的简单参数就好了(这就是所谓的摇杆了,名称可以在Inspector视图中进行修改)。

这个是修改摇杆大小的:

Area radius外摇杆大小。Tou radius内摇杆大小

 
 摇杆的控制设置:

首先要把要控制的游戏对象添加给:GameObject,然后进行调节

 
就这样完成了一个摇杆的创建,依次做可以添加多个,赶紧试试吧。。
 

 
2017-02-07 10:48:41 sakuraiike 阅读数 298
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4637 人正在学习 去看看 张刚

关于Touch 和 Event 的使用记录

using UnityEngine;
using System.Collections;
using UnityEngine.UI;


public class TouchEvent : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {
        if(Input.touchSupported){
            Debug.Log("支持触摸");
        }
        if(Input.touchPressureSupported){
            Debug.Log("支持压感");
        }
        if(Input.stylusTouchSupported){
            Debug.Log("支持手写笔");
        }

        //Input.touches 返回touch列表 分配临时变量
        //Input.touchCount 几点触摸
        //Input.multiTouchEnabled 开启/关闭多点触摸
        //Input.simulateMouseWithTouches  开启/关闭触摸模拟鼠标
        //Input.GetTouch(0) 不分配临时变量

    }
	
    // Update is called once per frame
    void Update()
    {

        if(Input.touchCount==1)Debug.Log("单击3");
        if(Input.touchCount>1)Debug.Log("多点触摸");

        //Input.GetTouch(0).phase==TouchPhase.Moved;

        if(Input.touchCount>0||Input.GetMouseButtonDown(0)){
           
            Debug.Log("-------左键按下------");
            if(Input.GetTouch(0).phase==TouchPhase.Began){


               


            }else if(Input.GetTouch(0).phase==TouchPhase.Moved){
                Vector2 pos= Input.GetTouch(0).position;
                Vector2 deltaPos= Input.GetTouch(0).deltaPosition;
	            float  deltaTime=Input.GetTouch(0).deltaTime;
	            // Input.GetTouch(0).deltaPosition.x;//y magnitude sqrtMagnitude
                Touch touch=Input.GetTouch(0);
                TouchPhase phase=touch.phase;
                TouchType type=touch.type;



            }else if(Input.GetTouch(0).phase==TouchPhase.Stationary){
                
            }
            else if(Input.GetTouch(0).phase==TouchPhase.Ended){

            }

        }

	
    }
    Vector2 lastPos;
    void OnGUI(){
        if(Event.current.isKey){
            Debug.Log("<color=yellow>Event.current.KeyCode:"+Event.current.keyCode.ToString()+"</color>");
            Debug.Log("<color=cyan>Event.current.character:"+Event.current.character+"</color>");
            if(Event.current.keyCode==KeyCode.A){
                //判断按下哪个键 按下的是不是鼠标
                Debug.Log("aaaaaaaaaaaa");
            }
        }
        if(Event.current.isMouse){
           // Event.current.clickCount;鼠标点击次数
            Debug.Log("<color=green>Event.current.button:"+Event.current.button.ToString()+"</color>");
        if(Event.current.type==EventType.MouseDown){
            lastPos= Event.current.mousePosition;
        }
        if(Event.current.type==EventType.MouseDrag){
            Vector2 curPos=Event.current.mousePosition;
                Vector2 distance= Event.current.delta;
            if(curPos.x<lastPos.x){

            }else{


            }

            lastPos=curPos;
        }
        if(Event.current.type==EventType.MouseUp){
            if(Event.current.button==0){
                Debug.Log("======左键抬起========");
            }
            if(Event.current.button==1){
                Debug.Log("======右键抬起========");
            }
            if(Event.current.button==2){
                Debug.Log("======中键抬起========");
            }
            if(Event.current.button==3){
                Debug.Log("======其他键抬起========");
            }
        }
        }
        if(Event.current.alt){
            Debug.Log("按下alt");
        }
        if(Event.current.capsLock){
            Debug.Log("打开大写锁定键");
        }
        if(Event.current.command){
            Debug.Log("按下命令键");
        }
        if(Event.current.control){
            Debug.Log("按下control键");
        }
        if(Event.current.functionKey){
            Debug.Log("是功能键");
        }
        if(Event.current.shift){
            Debug.Log("按下shift键");
        }
        if(Event.current.numeric){
            Debug.Log("是小键盘键");
        }
        //Event.current.pressure

    }
    /**
     * 判断是否为单点触摸
     **/
    public static bool singleTouch()
    {
        if(Input.touchCount==1)
            return true;
        return false;
    }
    /**
     *判断是否为多点触摸 
     **/
    public static bool multipointTouch()
    {
        if (Input.touchCount > 1)
            return true;
        return false;
    }
}


2019-01-18 15:08:15 weixin_44486991 阅读数 360
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4637 人正在学习 去看看 张刚

Cocos Creator Touch 事件

cc.Node 有一套完整的事件监听和分发机制。在这套机制之上,提供了一些基础的节点相关的系统事件。因此,在cocos creator中touch事件是与Node节点息息相关的。

// 使用枚举类型来注册
node.on(cc.Node.EventType.TOUCH_START, function (event) {
 console.log('Touch Start');
 event.getID(); //Touch事件的ID
 event.getLocation(); //Touch事件的手指位置
 event.getLocationX(); //获取X轴位置
 event.getLocationY();	//获取触点的 Y 轴位置
 event.getPreviousLocation();	//获取触点上一次触发事件时的位置对象,对象包含 x 和 y 属性
 event.getStartLocation(); 	//获取触点初始时的位置对象,对象包含 x 和 y 属性
 event.getDelta();	//获取触点距离上一次事件移动的距离对象,对象包含 x 和 y 属性
}, this);


// 使用事件名来注册
node.on('touchstart', function (event) {
 console.log('Touch Start');
 event.getID(); //Touch事件的ID
 event.getLocation(); //Touch事件的手指位置
 event.getLocationX(); //获取X轴位置
 event.getLocationY();	//获取触点的 Y 轴位置
 event.getPreviousLocation();	//获取触点上一次触发事件时的位置对象,对象包含 x 和 y 属性
 event.getStartLocation(); 	//获取触点初始时的位置对象,对象包含 x 和 y 属性
 event.getDelta();	//获取触点距离上一次事件移动的距离对象,对象包含 x 和 y 属性
}, this);

系统提供的触摸事件类型如下:

  • cc.Node.EventType.TOUCH_START ‘touchstart’ 当手指触点落在目标节点区域内时
  • cc.Node.EventType.TOUCH_MOVE ‘touchmove’ 当手指在屏幕上目标节点区域内移动时
  • cc.Node.EventType.TOUCH_END ‘touchend’ 当手指在目标节点区域内离开屏幕时
  • cc.Node.EventType.TOUCH_CANCEL ‘touchcancel’ 当手指在目标节点区域外离开屏幕时

Unity3D Touch 事件

Unity3D中Touch事件是以屏幕为基准的,与某个节点无关,全局的Touch事件都统计在Input中,
可以在update 中监听事件,Unity3D商店中有不少再次封装的Touch事件插件,比如EasyTouch。示例代码来自官方文档

void Update()
    {
        // Handle screen touches.
        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);

            // Move the cube if the screen has the finger moving.
            if (touch.phase == TouchPhase.Moved)
            {
                Vector2 pos = touch.position;
                pos.x = (pos.x - width) / width;
                pos.y = (pos.y - height) / height;
                position = new Vector3(-pos.x, pos.y, 0.0f);

                // Position the cube.
                transform.position = position;
            }

            if (Input.touchCount == 2)
            {
                touch = Input.GetTouch(1);

                if (touch.phase == TouchPhase.Began)
                {
                    // Halve the size of the cube.
                    transform.localScale = new Vector3(0.75f, 0.75f, 0.75f);
                }

                if (touch.phase == TouchPhase.Ended)
                {
                    // Restore the regular size of the cube.
                    transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);
                }
            }
        }
    }

区别

  1. Cocos中Touch以节点为中心,每个节点自己单独处理事件,全局检测可以通过制作一个全屏的Node节点,注册监听Touch事件;Unity3D中把Touch事件作为一种全局输入事件,如果想分开节点处理只能自行记录处理;
  2. Cocos中的TOUCH_MOVE只有手指移动时才能监听到,判断长按事件时,最好设置阈值,因为手指不像鼠标那样精确;Unity3D种每个Touch都有一个TouchPhase属性,通过这个属性判断Touch所处的阶段,所以在Unity3D种的TouchMove是不管手指有没有移动都会有事件。

创建了一个小游戏交流群,加群或者有问题交流 可以加我微信 备注“微信小游戏”
在这里插入图片描述
推广一下自己做的简单的小游戏
在这里插入图片描述
在这里插入图片描述

2018-06-30 23:52:40 weixin_42552233 阅读数 1428
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4637 人正在学习 去看看 张刚

说实话可能不相信,学习easy touch的最大难关竟然是找到easy touch资源尴尬。我的pc端的坦克大战已经完成,准备导出到android上运行,就想着使用虚拟摇杆控制。后面发现多数人推荐easy touch插件就想着使用easy touch,结果花了两三个小时寻找资源。从各个博客到各个资源分享网站,从百度网盘搜索到迅雷种子搜索,走投无路到发布百度知道求资源大哭,惨!最后绝望情况下通过加入siki学院的一门课程获得了资源。

其实资源不难找,但是绝大数都不是免费的,比如官网商城的20美元,csdn上的资源很多,虽然也不贵,但是光是充值c币都是100多起步,这些对于穷学生党来说有些难以承受。考虑到绝大数easy touch5都是收费的,所以给后面找不到资源的苦逼学生党一个指向吧,可以通过siki学院的一门easy touch5的课程获得资源,也可以私信(避免引起不必要的麻烦,不公布链接)我分享给你以供学习交流之用,毕竟同为学生党深深了解找不到资源的痛苦。

需要注意的是easy touch3已经不适合现在的unity3d版本了(unity3d 2018.1.1以上,亲测),easy touch4没有试过,但估计不行。

因为今天晚上找资源花了很多时间,所以没有时间去实践,明天实践后再考虑是否添加一些自己的个人理解,因为很多帖子已经讲述地非常详细了。下面贴出一位大佬的总结帖子以供参考学习:

https://blog.csdn.net/q764424567/article/details/78426905

以上,祝好。

2018-05-12 09:50:16 Mr_chenxiansheng 阅读数 496
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4637 人正在学习 去看看 张刚

欢迎加入U3D交流群,群号码:308093702~~~~


//速度
float speed = 1f;

private Touch oldTouch1; //上次触摸点1(手指1)
private Touch oldTouch2; //上次触摸点2(手指2)

void Update()
{
//Input.touchCount触摸数量
if (Input.touchCount <= 0)
{
return;
}
//Input.GetTouch获取触摸
//TouchPhase.Moved被移动(手指在屏幕上移动)
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
transform.Rotate(0, -touchDeltaPosition.x * speed, 0);
//transform.Rotate(-touchDeltaPosition.x * speed,0, 0);
}

//多点触摸, 放大缩小
Touch newTouch1 = Input.GetTouch(0);
Touch newTouch2 = Input.GetTouch(1);

//第2点刚开始接触屏幕, 只记录,不做处理
if (newTouch2.phase == TouchPhase.Began)
{
oldTouch2 = newTouch2;
oldTouch1 = newTouch1;
return;
}

//计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型
float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);

//两个距离之差,为正表示放大手势, 为负表示缩小手势
float offset = newDistance - oldDistance;

//放大因子, 一个像素按 0.01倍来算(100可调整)
float scaleFactor = offset / 100f;
Vector3 localScale = transform.localScale;
Vector3 scale = new Vector3(localScale.x + scaleFactor,
localScale.y + scaleFactor,
localScale.z + scaleFactor);

//最小缩放到 0.3 倍
if (scale.x > 3f && scale.y > 3f && scale.z > 3f)
{
transform.localScale = scale;
}
//记住最新的触摸点,下次使用
oldTouch1 = newTouch1;
oldTouch2 = newTouch2;
}

按惯例,先上效果图

博文 来自: l_jinxiong
没有更多推荐了,返回首页