Unity C# TouchScript - 将对象移动到向拂动方向的位置

4

我正在尝试让一个对象读取手势(使用Unity上的Touchscript包)- 然后将附加了脚本的对象向手势方向进行快速移动。

它确实能够读取手势,但我不知道如何获取手势方向并将其添加到刚体上的力/在该方向上进行平移。我查看了一些参考文献,如ScreenFlickVector和GestureDirection,但没有找到解决方法。我需要您的帮助!

private Rigidbody rb;
    // Use this for initialization
    void Start () {
        rb= GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        transform.Translate(Vector3.down * Time.deltaTime);

    }

    private void OnEnable()
    {
        // subscribe to gesture's Tapped event
        GetComponent<FlickGesture>().Flicked += OnFlick;

    }
    private void OnDisable()
    {
        GetComponent<FlickGesture>().Flicked -= OnFlick;
    }

    private void OnFlick(object sender, EventArgs e)
    {
        // Implement the Flick

    }
}
1个回答

2

可以按以下方式访问FlickGesture信息:

void OnFlick(object sender, System.EventArgs e)
{
    var gesture = sender as FlickGesture;

    float distanceFromCamera = Vector3.Distance(transform.position, Camera.main.transform.position);

    Vector3 wp1 = new Vector3(gesture.PreviousScreenPosition.x, gesture.PreviousScreenPosition.y, distanceFromCamera);
    wp1 = Camera.main.ScreenToWorldPoint(wp1);

    Vector3 wp2 = new Vector3(gesture.ScreenPosition.x, gesture.ScreenPosition.y, distanceFromCamera);
    wp2 = Camera.main.ScreenToWorldPoint(wp2);

    Vector3 velocity = (wp2 - wp1) / gesture.FlickTime;

    rigidbody.AddForce(velocity, ForceMode.VelocityChange);
}

通过获取手势的起始和结束位置,并将这些位置转换为世界空间,然后根据手势经过的时间进行缩放,得出被抛掷物体的世界空间速度。希望这可以帮助你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接