拖放代码工作正常,直到我将播放器对象拖到另一个对象上。如果我将播放器对象放在另一个对象上,则拖放不再起作用。任何人都可以解释为什么会这样吗?我将所有对象放在一个数组中,以便我可以更容易地跟踪它们。这是附加到主摄像头并创建对象的代码的一部分:
public GameObject sphereFab;
public GameObject dropFab;
public Vector3 position;
public static int arraySize; // This variable is set in the class s_initialize
private Object[] playerHolder;
private Object[] dropHolder;
// Use this for initialization
void Start () {
// need to send in the size of the array prior to initialization
playerHolder = new Object[arraySize];
dropHolder = new Object[arraySize];
// Create players
for (int a = 0; a < 12; a+=2) {
position = new Vector3(a - 5, -3, 0);
if (a == 0)
playerHolder [a] = Instantiate(sphereFab, position, Quaternion.identity);
else
playerHolder [a/2] = Instantiate(sphereFab, position, Quaternion.identity);
}
// Create drops for players
for (int a = 0; a < 12; a+=2) {
position = new Vector3(a - 5, 3, -.1f);
if (a == 0)
dropHolder [a] = Instantiate(dropFab, position, Quaternion.identity);
else
dropHolder [a/2] = Instantiate(dropFab, position, Quaternion.identity);
}
}
这是附加到播放器的代码:
private float dist;
private Vector3 v3Offset;
private Plane plane;
void OnMouseDown() {
plane.SetNormalAndPosition(Camera.main.transform.forward, transform.position);
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
float dist;
plane.Raycast (ray, out dist);
v3Offset = transform.position - ray.GetPoint (dist);
}
void OnMouseDrag() {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
float dist;
plane.Raycast (ray, out dist);
Vector3 v3Pos = ray.GetPoint (dist);
transform.position = v3Pos + v3Offset;
}
}
答案 0 :(得分:1)
我能够通过从dropFab中移除对撞机来解决问题。