Reservado para cuando llegue a casa y te explico!
Necesitas determinar la posición del ratón en la escena mediante un Raycast hacia un plano invisible creado por Script, en cuanto llegue a casa te lo explico y te pongo el ejemplo
Edit
Bueno, ya he llegado a casa así que te explico, estaba yo erróneo, no hace falta que calcules un Raycast para saber la posición, se hace directamente desde la MainCamera, te dejo el Script y te explico:
using UnityEngine;
using System.Collections;
public class playerHand : MonoBehaviour {
public GameObject bulletPrefab;
public Camera mainCamera;
public Vector3 mousePosition;
void Start()
{
mainCamera = GameObject.FindGameObjectWithTag("MainCamera").camera;
}
void Update()
{
mousePosition = Input.mousePosition;
mousePosition.z = Vector3.Distance(mainCamera.transform.position, transform.position);
transform.LookAt(mainCamera.ScreenToWorldPoint(mousePosition));
if (Input.GetMouseButtonDown(0))
Instantiate(bulletPrefab, transform.position, transform.rotation);
}
}
Bien, empecemos por partes:
public GameObject bulletPrefab;
public Camera mainCamera;
public Vector3 mousePosition;
Ahí tenemos las variables que necesitamos para lo que quieres hacer, te explico;
La variable GameObject llamada bulletPrefab es simplemente un prefab de un objeto que debes crear, que será la bala que dispare el jugador (yo he usado un rigidbody y he aplicado fuerza sobre ella en la función Start() que se llama cuando el objeto se crea), no tiene mucha complicación, la defines en código y la referencia se la pones desde el mismo inspector de Unity, arrastrando el prefab a la variable.
La variable Camera es la más importante, pues basaremos la posición del ratón en su vista.
Y la variable Vector3 es para tener las coordenadas exactas de la posición del ratón, es decir, es para poder representarla en una variable que podamos modificar después.
Siguiente:
void Start()
{
mainCamera = GameObject.FindGameObjectWithTag("MainCamera").camera;
}
Ahí llamamos a la función Start() de Unity, como te he explicado arriba, ésta es llamada justo cuando el objeto es creado en la escena, justo ahí y sólo ahí, esa función es llamada.
En este caso la uso para devolver la Cámara que está en la escena a la variable que hemos creado para representarla en el Script, si te fijas, en la parte de GameObject.FindGameObjectWithTag("MainCamera").camera especifico que esa variable busque un objecto en la escena con el tag MainCamera, es el tag que se le pone por defecto a la cámara que se crea en todas las escenas nuevas automáticamente con Unity, si no tienes una cámara con ese tag, cambia el GameObject.FindGameObjectWithTag("MainCamera").camera a GameObject.Find("EL NOMBRE DE LA CÁMARA EN LA ESCENA").camera y listos.
Ahora vamos al grano:
void Update()
{
mousePosition = Input.mousePosition;
mousePosition.z = Vector3.Distance(mainCamera.transform.position, transform.position);
transform.LookAt(mainCamera.ScreenToWorldPoint(mousePosition));
if (Input.GetMouseButtonDown(0))
Instantiate(bulletPrefab, transform.position, transform.rotation);
}
La función Update() es llamada cada frame en Unity, y como necesitamos que la posición del ratón se actualice sin parar para que el brazo siga al ratón siempre debemos escribir el siguiente código en esta función tan maravillosa.
Primero hacemos que la posición del ratón se devuelva a la variable mousePosition (Vector3).
Después, simplemente calculamos la distancia en el Vector.z dentro del Vector3 de la posición del ratón entre la Cámara que usamos y la posición actual del ratón.
Ahora hacemos que nuestro brazo mire al ratón en el siguiente fragmento de código:
transform.LookAt(mainCamera.ScreenToWorldPoint(mousePosition));
Aquí estamos haciendo que la rotación de nuestro brazo cambie justo hacia la posición exacta del ratón, para hacerlo, llamamos a una función de la Cámara, que simplemente nos devuelve la posición exacta del ratón en la escena, para así saber a dónde debe mirar nuestro brazo, y tachán, el brazo girará exactamente hacia donde esté el ratón.
Y ahora el último fragmento de código:
if (Input.GetMouseButtonDown(0))
Instantiate(bulletPrefab, transform.position, transform.rotation);
Lo que hacemos es comprobar cuándo se presiona el botón izquierdo del ratón (0 = botón izquierdo, 1 = botón derecho) y hacer una copia del Prefab de la bala que hemos creado antes, en la posición del brazo y en la rotación que tiene el brazo (que casualmente es la posición del ratón), y tachán, ya tienes lo que querías!
No sé si estás familiarizado con los Prefabs en Unity, los Prefabs son Objetos que se pueden reciclar, es decir, que los creamos, dejamos el código como queremos, y lo convertimos en un Objeto Original, para que luego si queremos por ejemplo disparar balas, tengamos una fuente interminable de balas, porque lo único que haremos es copiar el Objeto Original y ponerlo en nuestra escena.
Un saludo, espero que te haya servido de ayuda.
PD: Si no te funciona o quieres trastear puedes mirar el prototipo que te he hecho en mi dropbox: https://www.dropbox.com/sh/9y9196e7jbicnul/1EtlIq1isP