我创建了一个对象,它附加到弹簧关节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;
}
}
答案 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不适合,您需要找到另一种解决方法。