我正在尝试做一个罚球比赛的C#脚本,需要得到的鼠标位置在世界上,它应该是在3D中,以能够在所有3个轴投掷。我对脚本编程有点陌生,我写的脚本还不错,但并不正确。我不确定如何让深度或y轴工作,因为屏幕只有2维。
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);
}
}发布于 2015-05-20 14:23:24
需要在传递到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引用。
https://stackoverflow.com/questions/30341137
复制相似问题