Unity计算3D鼠标位置

时间:2015-05-20 05:40:15

标签: c# optimization unity3d mouse

我正在尝试为一个罚球球制​​作一个C#脚本并且需要在世界上获得鼠标位置,并且它应该是3D以便能够投掷所有3个轴。我对脚本和我编写的脚本很有用,但不对。我不确定如何使深度或y轴工作,因为屏幕只有2d。

 using UnityEngine;
 using System.Collections;

 public class ShootBall : MonoBehaviour {

     private Rigidbody rb;
     private RaycastHit hit;
     private Vector3 com;
     private Vector3 shootDirection;

     void Start () {
         rb = GetComponent<Rigidbody>();
     }

     void Update () {
     }

     void OnMouseDown (){
         com = rb.worldCenterOfMass;
         Debug.Log (com);
     }

     void OnMouseDrag (){
         Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         Debug.Log(ray);
         Physics.Raycast(ray, out hit);
     }

     void OnMouseUp (){
         shootDirection = com - hit.point;
         rb.AddForce (shootDirection * 100);
     }
 }

1 个答案:

答案 0 :(得分:0)

需要在传递到ScreenPointToRay的矢量的z值上设置与摄像机的距离。 Input.mousePosition作为ScreenPointToRay的参数工作的原因是因为Vector2可以隐式地转换为Vector3。所以尝试做这样的事情:

float distanceFromCamera = Vector3.Distance(ballGameObject.transform.position, Camera.main.transform.position);
Vector3 inputPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, distanceFromCamera);
Ray ray = Camera.main.ScreenPointToRay(inputPosition);

ballGameObject是将被抛出的球的gameObject引用。