2017-02-21 22 views
0

, когда я удерживаю «w» и перемещаю камеру, плеер не будет перемещаться в направлении камеры, например, если я иду вперед и переместите камеру влево, она не пойдет влево, но продолжайте идти вперед. Каковы возможные способы исправить это. Игрок движения СценарийПлеер не перемещается, где находится камера

public float movementspeed = 5.0F; 

// Use this for initialization 
void Start() { 
    Cursor.lockState = CursorLockMode.Locked; 
} 

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

    float translation = Input.GetAxis("Vertical") * movementspeed; 
    float straffe = Input.GetAxis("Horizontal") * movementspeed; 
    translation *= Time.deltaTime; 
    straffe *= Time.deltaTime; 

    transform.Translate(straffe, 0, translation); 
} 

}

и камеры Просмотр сценария

public float xMoveThreshold = 1000.0f; 
public float yMoveThreshold = 1000.0f; 

public float yMaxLimit = 50.0f; 
public float yMinLimit = -50.0f; 


float yRotCounter = 0.0f; 
float xRotCounter = 0.0f; 

Transform player; 

void Start() 
{ 
    player = Camera.main.transform; 
} 

// Update is called once per frame 
void Update() 
{ 
    xRotCounter += Input.GetAxis("Mouse X") * xMoveThreshold * Time.deltaTime; 
    yRotCounter += Input.GetAxis("Mouse Y") * yMoveThreshold * Time.deltaTime; 
    yRotCounter = Mathf.Clamp(yRotCounter, yMinLimit, yMaxLimit); 
    //xRotCounter = xRotCounter % 360;//Optional 
    player.localEulerAngles = new Vector3(-yRotCounter, xRotCounter, 0); 
} 

}

Picture 1

Picture 2

+0

Я прикрепил первый сценарий к камере, а второй скрипт пуст. Мне удалось передвинуть и повернуть камеру. Перемещение в порядке. Он всегда перемещается в направлении, к которому обращена камера. В чем проблема? – Programmer

+0

Скажем, я смотрю влево и нажимаю 'w', это не будет идти дальше. направление движения не изменится с камерой, и не имеет значения, каким образом я столкнулся с этим, это будет идти определенным образом, например, если я буду смотреть вперед и нажимать «w» и не касаться камеры, это пойдет прямо, но если я поверну камеру, чтобы оглянуться назад и нажмите «w», она вернется назад. – Johnny

+1

С изображением, которое вы обновили в своем вопросе, ** не ** помещайте камеру под GameObject. Сделайте это наоборот. Сделайте этот Player дочерним элементом камеры, затем присоедините оба сценария к Камере, которая теперь является родительским объектом Player. – Programmer

ответ

0

Для этого вам необходимо использовать преобразование камеры. Что-то вроде:

public float movementspeed = 5.0F; 
public Transform cameraTransform; 

// Use this for initialization 
void Start() { 
    Cursor.lockState = CursorLockMode.Locked; 
} 

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

    float translation = Input.GetAxis("Vertical") * movementspeed; 
    float straffe = Input.GetAxis("Horizontal") * movementspeed; 
    translation *= Time.deltaTime; 
    straffe *= Time.deltaTime; 

    Vector3 movement = cameraTransform.Forward * translation + cameraTransform.Right * straffe; 
    transform.position = transform.position+ movement; 
}