Autor Wątek: Kamera do FPS - poruszanie kamerą względem jej rotacji  (Przeczytany 1370 razy)

Offline HawkDeath

  • Użytkownik

# Wrzesień 20, 2014, 20:00:08
Witam,
w jaki sposób mam zrobić kamerę, aby poruszała się do przodu w zależności od jej rotacji (tak jak np. w Call of Duty, czy CS)
public class CameraPerson : MonoBehaviour {

public Vector3 position;
public float sensitivityX = 1.5f;
public float sensitivityY = 1.5f;
public float smooth = 1.5f;


private float rotationX;
private float rotationY;
private Quaternion xQuaterion,yQuaterion;

// Use this for initialization
void Start () {
position = transform.position;
}

// Update is called once per frame
void Update () {
float LeftRight = Input.GetAxis("Horizontal");//lewo, prawo
float ForwordBack = Input.GetAxis("Vertical");//góra, dół
float jump = Input.GetAxis("Jump");
float down = Input.GetAxis("DownCamera");

               //poruszanie kamerą
position.x += (LeftRight * Time.deltaTime * smooth);
position.z += (ForwordBack * Time.deltaTime * smooth) ;

position.y += jump * Time.deltaTime * smooth;
position.y -= down * Time.deltaTime * smooth;

transform.localPosition = position;


//rotacja
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;


Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);

transform.localRotation =   xQuaternion * yQuaternion;

}

}

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Furry

  • Użytkownik
    • DevBlog

# Wrzesień 20, 2014, 20:57:07
najprościej to transform.position += transform.forward * predkosc;

Offline HawkDeath

  • Użytkownik

# Wrzesień 20, 2014, 23:17:08
No, nie działa :(
Może jest inny sposób?

Offline patgame

  • Użytkownik

  • +1
# Wrzesień 21, 2014, 10:04:56
Najprościej jest użyć transform.Translate
Mam nadzieję że pomogłem

using UnityEngine;
using System.Collections;

public class asd : MonoBehaviour {

public float sensitivityX = 1.5f;
public float sensitivityY = 1.5f;
public float smooth = 1.5f;
public float Speed = 1.5f;

private float rotationX;
private float rotationY;
private Quaternion xQuaterion,yQuaterion;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

float inputX = Input.GetAxis("Horizontal");
float inputY = Input.GetAxis("Vertical");


camera.transform.Translate(inputX*Speed,0,inputY*Speed, Space.Self);

//rotacja
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;


Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);

transform.localRotation =   xQuaternion * yQuaternion;

}

}

Offline HawkDeath

  • Użytkownik

# Wrzesień 21, 2014, 17:12:52
Dzięki :D

Offline koirat

  • Użytkownik

  • +1
# Wrzesień 21, 2014, 20:08:52
Przemnóż jeszcze tą prędkość przez czas.