【问题标题】:Unity , script to drag cameraunity , 脚本拖动相机
【发布时间】:2020-01-11 01:11:47
【问题描述】:

我在 XY 平面上有二维网格。我有以下脚本将相机移动到平面上,相机从 (0,0,-10) 开始。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DragMap : MonoBehaviour {
private float dist;
private Vector3 MouseStart;
private Vector3 derp;

void Start () {
    dist = transform.position.z;  // Distance camera is above map
}

void Update () {
    if (Input.GetMouseButtonDown (2)) {
        MouseStart = new Vector3(Input.mousePosition.x, Input.mousePosition.y, dist);
        MouseStart = Camera.main.ScreenToWorldPoint (MouseStart);
        MouseStart.z = transform.position.z;

    } 
    else if (Input.GetMouseButton (2)) {
        var MouseMove = new Vector3(Input.mousePosition.x, Input.mousePosition.y, dist);
        MouseMove = Camera.main.ScreenToWorldPoint (MouseMove);
        MouseMove.z = transform.position.z;
        transform.position = transform.position - (MouseMove - MouseStart);
    }
}
}

但我终其一生都无法弄清楚要改变什么,所以如果我向右拖动鼠标,相机就会向左移动,反之亦然。同样,如果我向上拖动鼠标,我想向下移动相机,反之亦然。帮助!

感谢您的任何回复。

-欧米茄博士。

【问题讨论】:

  • 你的代码目前是做什么的?拖动时移动方向错误?
  • 当我向右拖动鼠标时,它会向右移动相机,但我想反转它。

标签: c# unity3d


【解决方案1】:

你需要对 MouseMove 向量的 x 取反才能只翻转 x 的移动:

MouseMove = new Vector3(-MouseMove.x, MouseMove.y, MouseMove.z);

【讨论】:

    【解决方案2】:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class DragMap : MonoBehaviour {
    private float dist;
    private Vector3 MouseStart;
    private Vector3 derp;
    
    void Start () {
        dist = transform.position.z;  // Distance camera is above map
    }
    
    void Update () {
        if (Input.GetMouseButtonDown (2)) {
            MouseStart = new Vector3(Input.mousePosition.x, Input.mousePosition.y, dist);
            MouseStart = Camera.main.ScreenToWorldPoint (MouseStart);
            MouseStart.z = transform.position.z;
    
        } 
        else if (Input.GetMouseButton (2)) {
            var MouseMove = new Vector3(Input.mousePosition.x, Input.mousePosition.y, dist);
            MouseMove = Camera.main.ScreenToWorldPoint (MouseMove);
            MouseMove.z = transform.position.z;
            transform.position = transform.position - (MouseMove - MouseStart);
        }
    }
    }
    

    这里有一个简单的解决方法。如果要同时翻转 x 和 y,请将“- (MouseMove - MouseStart)”替换为“+ (MouseMove - MouseStart)”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-23
      • 1970-01-01
      • 2023-01-11
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多