C# 统一计算三维鼠标位置

C# 统一计算三维鼠标位置,c#,optimization,unity3d,mouse,C#,Optimization,Unity3d,Mouse,我正在为一场罚球游戏制作一个C#脚本,需要获得鼠标在世界上的位置,它应该是3D的,以便能够在所有3个轴上投球。我对脚本有点陌生,我写的脚本很管用,但并不正确。我不知道如何获得深度或y轴的工作,因为屏幕只有二维 using UnityEngine; using System.Collections; public class ShootBall : MonoBehaviour { private Rigidbody rb; private RaycastHit hit

我正在为一场罚球游戏制作一个C#脚本,需要获得鼠标在世界上的位置,它应该是3D的,以便能够在所有3个轴上投球。我对脚本有点陌生,我写的脚本很管用,但并不正确。我不知道如何获得深度或y轴的工作,因为屏幕只有二维

 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);
     }
 }
使用UnityEngine;
使用系统集合;
公共课射击:单一行为{
私人刚体;
二等兵雷卡斯特命中;
私有向量3 com;
专用矢量3和方向;
无效开始(){
rb=GetComponent();
}
无效更新(){
}
void OnMouseDown(){
com=rb.worldCenterOfMass;
Debug.Log(com);
}
void OnMouseDrag(){
Ray-Ray=Camera.main.screenpointoray(输入.鼠标位置);
调试日志(ray);
物理。光线投射(光线,出击);
}
void OnMouseUp(){
shootDirection=com-hit.point;
rb.AddForce(射击方向*100);
}
}

需要在传递到ScreenPointRoay的向量的z值上设置与摄像机的距离。Input.mousePosition用作ScreenPointRoy的参数的原因是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引用