Что-то не так с управлением вращением в 2d шутер сверху вниз в unity3d
Я пытаюсь заставить своего персонажа стоять перед мышью, вращая вокруг своей оси y. Он немного вращается, но не обращен к мышке. Положение камеры находится прямо над плеером, и в орфографическом виде я вижу много других примеров стреляющих сверху вниз, и там почти так же, как у меня, поэтому я не знаю, в чем проблема, пожалуйста, помогите, спасибо.
using UnityEngine;
using System.Collections;
public class playermovementscript : MonoBehaviour {
public float movementspeed = 5f;
public float bulletspeed = 10f;
public GameObject bullet;
public GameObject shooter;
public Vector3 target;
public Camera camera;
// Use this for initialization
void Start () {
//refrence to main camera
Camera camera;
}
// Update is called once per frame
void Update () {
//call movement function in every frame
movement ();
// cheek for input of f in every frame if true execute shoot function
if (Input.GetKeyDown (KeyCode.F)) {
shoot();
}
}
void movement(){
// makes refrence to gameobjects rigidbody and makes its velocity varible to equal values of axis x and y
gameObject.GetComponent<Rigidbody>().velocity = new Vector3(Input.GetAxisRaw("Horizontal")*movementspeed,0,Input.GetAxisRaw("Vertical")*movementspeed);
// makes vector 3 type target equall to mouse position on pixial cordinates converted in to real world coordniates
target = camera.ViewportToWorldPoint (new Vector3(Input.mousePosition.x,Input.mousePosition.y,camera.transform.position.y - transform.position.y));
//target.x -= transform.position.x;
//target.z -= transform.position.z;
// states the vector 3 values of target
Debug.Log (target);
// makes object local z face target and iniziates up axis
transform.LookAt (target,Vector3.up);
}
1 ответ
Собираюсь попытаться объяснить, что происходит...
target = camera.ViewportToWorldPoint (new Vector3(Input.mousePosition.x,Input.mousePosition.y,camera.transform.position.y - transform.position.y));
Приведенный выше код пытается преобразовать позицию мыши, которая находится в Экранном пространстве (которая измеряет положение от (0,0) до ширины / высоты экрана в пикселях), в область просмотра (которая измеряет тот же экран, но с В другой мере он измеряет позиции от (0,0) до (1,1)).
В единстве
- Измерение пространства экрана: начало координат (0,0) до максимальной ширины / высоты
- Размер окна просмотра: Происхождение (0,0) - (1,1)
- Ссылка: http://docs.unity3d.com/ScriptReference/Camera.html
Если вы все еще хотите использовать "ViewportToWorldPoint", тогда вы можете создать "ScreenToViewportPoint", а затем "ViewPortToWorldPoint".
В противном случае, вы можете изучить использование "ScreenToWorldPoint" с самого начала.