用鼠标拖动GameObject

时间:2015-09-28 13:11:24

标签: c# unity3d

我在创建脚本时遇到一些问题,一旦玩家点击gameObject,gameObject将跟随鼠标。再次单击鼠标后,对象将被删除。

这是脚本:

public float distance = 10;

public void OnMouseDrag()
{
    Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance);
    Vector3 objPosition = Camera.main.ScreenToWorldPoint(mousePosition);

    transform.position = objPosition;
}

这很好用,但问题是如果播放器(主摄像头)上有任何类型的移动脚本,例如它上面的字符控制器脚本或其父节点,则拾取的游戏对象将移动为如果它试图远离鼠标。

public float speed = 6.0f;
public float jumpSpeed = 8.0f;
public float gravity = 20.0f;
private Vector3 moveDirection = Vector3.zero;

void Update()
{
    CharacterController controller = GetComponent<CharacterController>();

    if(Input.GetKey(KeyCode.LeftShift))
    {
        speed = 15.0f;
    }else
    {
        speed = 6.0f;
    }

    if(controller.isGrounded)
    {
        moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

        moveDirection = transform.TransformDirection(moveDirection);

        moveDirection *= speed;
    }

    if(Input.GetButton("Jump"))
    {
        moveDirection.y = jumpSpeed;
    }

    moveDirection.y -= gravity * Time.deltaTime;
    controller.Move(moveDirection * Time.deltaTime);

    float rotateRight = Input.GetAxis("Mouse X");

    transform.Rotate(0, rotateRight, 0);
}

如果上面的脚本被禁用,那么GameObject就不会出类拔萃,而且运行正常。

我知道在角色控制器中进行的输入以某种方式影响顶级脚本,鼠标移动,因此gameObject在尝试保持鼠标上的某个点时向该方向转换。

但是如何让它不会影响它。

1 个答案:

答案 0 :(得分:0)

我敢打赌鼠标拖动是在你移动之前发生的。

尝试将拖动逻辑放在LateUpdate()中,以便它可以适应新的位置