首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity计算3D鼠标位置

Unity计算3D鼠标位置
EN

Stack Overflow用户
提问于 2015-05-20 13:40:15
回答 1查看 1.2K关注 0票数 2

我正在尝试做一个罚球比赛的C#脚本,需要得到的鼠标位置在世界上,它应该是在3D中,以能够在所有3个轴投掷。我对脚本编程有点陌生,我写的脚本还不错,但并不正确。我不确定如何让深度或y轴工作,因为屏幕只有2维。

代码语言:javascript
复制
 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);
     }
 }
EN

回答 1

Stack Overflow用户

发布于 2015-05-20 14:23:24

需要在传递到ScreenPointToRay的向量的z值上设置与摄影机的距离。Input.mousePosition之所以可以作为ScreenPointToRay的参数,是因为Vector2可以隐式转换为Vector3。所以试着这样做:

代码语言:javascript
复制
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引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30341137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档