首页 文章

Unity对象不跟随鼠标位置

提问于
浏览
1

我创建了一个对象,它附加到 spring 关节2D,然后我在其上创建了一个脚本,使其跟随鼠标位置 . 但它并没有发生,事实上奇怪的事情发生了 . 当我点击对象时,它出现在屏幕的中央 . 请看看我的代码 . 为什么我不能使用transform.position . 更奇怪的事情发生了 . Object有一个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 回答

  • 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不适合,您需要找到另一种解决方法 .

相关问题