找回密码
 注册帐号

扫一扫,访问微社区

脚本 unity 鼠标右键点击事件 瞬间按下和一直按住

3
回复
237
查看
[ 复制链接 ]
4四处流浪
347/500
排名
12677
昨日变化

7

主题

143

帖子

347

积分

Rank: 4

UID
309776
好友
0
蛮牛币
346
威望
0
注册时间
2018-12-26
在线时间
125 小时
最后登录
2019-10-17
2019-9-23 16:44:33 显示全部楼层 阅读模式
5蛮牛币
右键可以控制镜头上下左右旋转,左键平移。然后左键双击物体镜头拉近,右键单击返回上一个镜头(就是拉远)。其他都实现了,但是右键返回和右键控制镜头旋转冲突了。我只要按右键就肯定会先实现返回拉远功能。有没有好的方法,单击一次镜头拉远,按住可以旋转。在此请教大佬。

QQ截图20190923163540.png 这个可以判断是不是按住,但是并不能实现想要的效果。

回复

使用道具 举报

7日久生情
2099/5000
排名
1410
昨日变化

15

主题

240

帖子

2099

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
48492
好友
8
蛮牛币
9693
威望
0
注册时间
2014-10-11
在线时间
938 小时
最后登录
2019-10-17
QQ
2019-9-23 16:44:34 显示全部楼层
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;

public class ButtonLongPress : UIBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler, IPointerClickHandler
{

    [Tooltip("按下多长时间触发长按")]
    public float duration = 1.0f;

    public UnityEvent onLongPress = new UnityEvent();
    public UnityEvent onClick = new UnityEvent();

    private bool isDown = false;
    private bool longPress = false;
    private float touchTime;

    private void Update()
    {
        if (isDown && !longPress)
        {
            if (Time.time - touchTime > duration)
            {
                longPress = true;
                //长按
                LongPress();
            }
        }
    }

    public void OnPointerDown(PointerEventData eventData) //按下执行
    {
        touchTime = Time.time;
        isDown = true;
        longPress = false;
    }

    public void OnPointerUp(PointerEventData eventData) //抬起执行
    {
        isDown = false;
    }

    public void OnPointerExit(PointerEventData eventData) //离开执行
    {
        isDown = false;
    }

    //长按方法执行了,就不执行点击,,,反之亦然...
    public void OnPointerClick(PointerEventData eventData)
    {
        if (!longPress)
        {
            PressDowm();
        }
    }
    /// <summary>
    /// 长按
    /// </summary>
    private void LongPress()  //  todo...方法中实现,要做的事情
    {
        print("长按");
    }
    /// <summary>
    /// 点击
    /// </summary>
    private void PressDowm()
    {
        print("点击");

    }

}


回复

使用道具 举报

1

主题

17

帖子

36

积分

Rank: 1

UID
302926
好友
0
蛮牛币
157
威望
0
注册时间
2018-11-6
在线时间
18 小时
最后登录
2019-10-1
2019-9-23 17:18:40 显示全部楼层
继承OnDrag(PointerEventData eventData)拖动的接口,可以使用(eventData.button==PointerEventData.InputButton.right)判断是否是右键拖动。
主要是PointerEventData.InputButton这个进行判断。
不知道能不能顺着这个思路帮助解决一下。如未帮助请见谅。
回复

使用道具 举报

4四处流浪
347/500
排名
12677
昨日变化

7

主题

143

帖子

347

积分

Rank: 4

UID
309776
好友
0
蛮牛币
346
威望
0
注册时间
2018-12-26
在线时间
125 小时
最后登录
2019-10-17
楼主 2019-9-24 14:52:43 显示全部楼层
liyan_ 发表于 2019-9-23 16:44
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;

感谢,清晰详细。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则