我创建了一个对象,它附加到 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 回答
问题是当你使用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不适合,您需要找到另一种解决方法 .