【问题标题】:Unity3d Move 2D Sprite relative to mouse positionUnity3d相对于鼠标位置移动2D Sprite
【发布时间】:2017-11-03 23:09:18
【问题描述】:

如果我用鼠标移动我的精灵,精灵总是正好在光标下。

目前我的代码如下所示:

    public GameObject player;
    private float distance = 1;

    private void Update()
    {
        if (Input.GetMouseButton(0))
        {
            Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance);
            Vector3 playerPos = Camera.main.ScreenToWorldPoint(mousePos);
            player.transform.position = playerPos;
        }
    }

但我想移动精灵,无论我的鼠标在背景上的哪个位置。因此,如果我单击并按住精灵旁边并将鼠标向右移动,我希望我的精灵在同一方向上以相同的方式移动。

Example Picture

【问题讨论】:

    标签: unity3d position 2d mouse


    【解决方案1】:

    在这种情况下,您应该使用相对移动,即单击鼠标按钮时鼠标从当前位置移动的量,就好像那是原点一样。

    因此,您应该记下用户按下鼠标按钮时的当前鼠标位置。

    这是我描述的一种解决方案:

    // by Vander 'imerso' Nunes to StackOverflow answer
    
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class MouseDrag : MonoBehaviour
    {
        public GameObject player;
    
        bool dragging = false;
        Vector3 mouseStartPos;
        Vector3 playerStartPos;
    
        private void Update()
        {
            if (Input.GetMouseButtonDown(0))
            {
                dragging = true;
                mouseStartPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0));
                playerStartPos = player.transform.position;
            }
            else if (Input.GetMouseButtonUp(0))
            {
                dragging = false;
            }
    
            if (dragging)
            {
                Vector3 mousePos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0));
                Vector3 move = mousePos - mouseStartPos;
                player.transform.position = playerStartPos + move;
            }
        }
    }
    

    您会注意到,当最初按下按钮时,当前玩家位置和当前鼠标位置都会被记录下来。所以,他们的行为就好像他们是起源一样。玩家的移动距离仅是鼠标按下按钮时鼠标从其初始位置移动的距离。

    【讨论】:

    • 哇,谢谢,完美运行。我在这个问题上挣扎了好几个小时
    • 很高兴为您提供帮助。我看到你是新来的,所以也许你不知道,但你应该接受答案。谢谢。
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多