【问题标题】:Unity click outside object, start dragging when on topUnity单击外部对象,在顶部时开始拖动
【发布时间】:2017-01-19 21:05:45
【问题描述】:

我在 Unity 中实现了一个 IDragHandler,我希望不仅能够在我触摸它时开始拖动对象,而且还希望指针在向下时从外部进入它。我的代码的核心:

public class Draggable : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerEnterHandler
{
    public void OnBeginDrag(PointerEventData eventData)
    {
        ...
    }

    public void OnDrag(PointerEventData eventData)
    {
        ...
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        ...
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        // TODO: Don't just check mouse, take touch into account!
        if (Input.GetMouseButton(0))
        {
            this.OnBeginDrag(eventData);
        }
    }
}

所以,基本上,如果指针进入对象时指针向下,我想开始拖动它。然而,这段代码似乎只是对该对象的 EventSystem 产生了错误,因为当执行这段代码时,什么都没有发生,我突然什至不能正常拖动对象了。

有没有办法从我缺少的 C# 脚本中手动触发“OnBeginDrag”?

【问题讨论】:

    标签: c# unity3d unity5


    【解决方案1】:

    我之前在创建自定义相机时遇到过这个问题。问题是如果在触发事件之前按住鼠标按钮,您的语句“if(Input.GetMouseButton(0))”不会返回 true。与我认为合乎逻辑的相反,“if(Input.GetMouseButton(0))”并不意味着如果按住鼠标按钮,它的意思更像是在 {stuff} 然后 {more stuff} 时单击鼠标按钮。

    您应该使用“Input.GetButton()”而不是“Input.GetButtonDown()”。 Input.GetButtonDown() 只为按下按钮的帧返回 true。

    http://answers.unity3d.com/questions/412117/do-something-while-key-is-pressed-and-held-down.html

    你的问题有点不清楚。你有没有让代码在任何方面都可以工作,或者只是当你想知道鼠标按钮从外部进入时光标从外部进入时拖动一个对象?

    【讨论】:

    • 感谢您的回答!我将“GetMouseButton”解释为“GetButton”,但特别是鼠标按钮,因为有一个“GetMouseButtonDown”功能可用,对应于“GetButtonDown”,所以如果这是正确的,那么我应该已经处理了这个问题。很抱歉不清楚。我的开始拖动、拖动和结束拖动都可以正常工作。我只想通过手动调用 BeginDrag 来触发链,以启动我实现的拖动行为,即使指针向下事件发生在对象之外。
    • 嗯。那时我不确定。我认为您已经处理了获取按钮的事情。我的错。你现在应该做的是使用 debug.log 看看出了什么问题。例如,您可以在 if 语句中放置一个 debug.log,其中包含 debug.log("this part works");看看它是否还在射击。该消息将显示在控制台中。这可以帮助您找出哪里出了问题以及从哪里着手修复它。
    • 我知道我有各种各样的脚本无法工作,原因是如果不使用 debug.log 我永远无法弄清楚。例如,我曾经制作了一个平台,它应该以 90 度的增量旋转,例如从 270 到 360,等等。而且它从来没有开过火,我不知道为什么不开火。最后是因为我使用了if语句,如果度数
    • 谢谢! :) 我发现实际上调用了 OnBeginDrag 是正确的,问题是我只是调用 OnBeginDrag,而不是从 UnityEngine.EventSystems 启动拖动事件链。因此,OnBeginDrag 被调用一次,但 OnDrag 不会被 EventSystems 连续调用。
    猜你喜欢
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 2015-11-21
    • 1970-01-01
    相关资源
    最近更新 更多