【问题标题】:Drag GameObject With Mouse用鼠标拖动游戏对象
【发布时间】:2015-12-25 17:57:17
【问题描述】:

我在创建脚本时遇到了一些问题,一旦玩家单击游戏对象,该游戏对象就会跟随鼠标。再次单击鼠标后,对象将被放下。

这是脚本:

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 不会崩溃并且可以正常工作。

我知道角色控制器中的输入以某种方式影响了顶部脚本,鼠标移动,因此游戏对象在该方向上变换,同时试图保持鼠标上的某个点。

但是我怎么做所以它不会影响它。

【问题讨论】:

  • 尝试在您的更新中放置一个布尔值,该布尔值会在拖动 if(isBeingDragged) return; 时切换。只要脚本为真,就有效地禁用脚本。

标签: c# unity3d


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多