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