Unity对象不跟随鼠标位置

时间:2017-04-16 10:58:17

标签: c# unity3d

我创建了一个对象,它附加到弹簧关节2D,然后我在其上创建了一个脚本,使其跟随鼠标位置。但它并没有发生,事实上奇怪的事情发生了。当我点击对象时,它出现在屏幕的中央。请看看我的代码。为什么我不能使用transform.position。更奇怪的事情发生了。对象有一个collider和rigidbody2d连接到它

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

public class Pulling : MonoBehaviour {

    private Rigidbody2D rigidbody;
    private bool ispressed = false;

    void Start(){
        rigidbody = GetComponent<Rigidbody2D> ();
    }

    void Update(){

        if (ispressed) {
            rigidbody.position = Camera.main.ScreenToWorldPoint (Input.mousePosition);
        }
    }

    void OnMouseDown(){
        ispressed = true;
        rigidbody.isKinematic = true;
    }

    void OnMouseUp(){
        ispressed = false;
        rigidbody.isKinematic = false;
    }
}

1 个答案:

答案 0 :(得分:2)

问题是当你使用Input.mousePosition作为屏幕点时,它的世界点将在z轴上的相机上,而不是在具有更高z的另一个平面上。

您可以通过手动分配屏幕点的z值来解决此问题。

rigidbody.position = Camera.main.ScreenToWorldPoint (new Vector3(Input.mousePosition.x, Input.mousePosition.y, z));

其中z是相机与所需平面的距离。 (自然z = -Camera.main.z)

请注意,如果相机与z轴对齐,这将有效,但如果它是倾斜的,则ScreenToWorldPoint不适合,您需要找到另一种解决方法。