Еще одна тема с вопросами по Unity
(Управление перемещением и вращением объекта)
Хеллоу, эт самое, типа как бы возможно такой вопрос уже был, но решения не нашел, первый день столкнулся с программированием.
По туториалам сделал скрипт, есть объект - умеет:
- двигаться вперед
- вперед с ускорением
- назад
- вращаться, правда только при передвижении вперед и назад...
Как сделать чтобы он еще умел вращаться на месте, но чтобы при передвижении скорость поворота не умножалась
картинка
+ Показать
− Скрыть
using UnityEngine;
using System.Collections;
public class move : MonoBehaviour {
public GameObject player;
public int speedForward = 5;
public int speedBackward = 3;
public int speedRotation = 3;
// Use this for initialization
void Start () {
player = (GameObject)this.gameObject;
}
// Update is called once per frame
void Update () {
if (Input.GetKey (KeyCode.W) || Input.GetKey (KeyCode.UpArrow)) {
if (Input.GetKey (KeyCode.LeftShift)) {
player.transform.position += player.transform.forward * speedForward * Time.deltaTime;
}
player.transform.position += player.transform.forward * speedForward * Time.deltaTime;
if (Input.GetKey (KeyCode.A) || Input.GetKey (KeyCode.LeftArrow)) {
player.transform.Rotate (Vector3.down * speedRotation);
}
if (Input.GetKey (KeyCode.D) || Input.GetKey (KeyCode.RightArrow)) {
player.transform.Rotate (Vector3.up * speedRotation);
}
}
if (Input.GetKey (KeyCode.S) || Input.GetKey (KeyCode.DownArrow)) {
player.transform.position -= player.transform.forward * speedBackward * Time.deltaTime;
if (Input.GetKey (KeyCode.A) || Input.GetKey (KeyCode.LeftArrow)) {
player.transform.Rotate (Vector3.up * speedRotation);
}
if (Input.GetKey (KeyCode.D) || Input.GetKey (KeyCode.RightArrow)) {
player.transform.Rotate (Vector3.down * speedRotation);
}
}
}
}
player.transform.Rotate (Vector3.down * speedRotation);
полагаю вращению тоже нужно добавить " * Time.deltaTime" , для равномерности
чтобы скорость поворота при движении и стоянии не складывалась очевидно нужно применять только одно вращение (просто вынести вращение из блоков IF, не дублируя этот код)
Chupakaber
У меня такая тема, что при движении назад вращение происходит в другие стороны )
Shuripusta
> Как сделать чтобы он еще умел вращаться на месте
как танк?
Shuripusta
> вращение происходит в другие стороны
как машина?
тогда нужно два условия (IF)
1. когда едет вперёд или стоит
if(!Input.GetKey (KeyCode.S)) { }
то есть не едет назад
2. когда едет назад
при этом движение вперёд вынести в третье условие когда он должен только ехать вперёд (только клавиша W)
Shuripusta
> Как сделать чтобы он еще умел вращаться на месте
как танк?
Shuripusta
> вращение происходит в другие стороны
как машина?
Да, все верно )
Капец, Chupakaber, Работает! Спасибо!
Правда смутно осознаю как )
Код
+ Показать
− Скрыть
using UnityEngine;
using System.Collections;
public class move2 : MonoBehaviour {
public GameObject player;
public int speedForward = 5;
public int speedBackward = 3;
public int speedRotation = 3;
// Use this for initialization
void Start () {
player = (GameObject)this.gameObject;
}
// Update is called once per frame
void Update () {
if (!Input.GetKey (KeyCode.S)) {
player.transform.position += player.transform.forward * 0;
if (Input.GetKey (KeyCode.A) || Input.GetKey (KeyCode.LeftArrow)) {
player.transform.Rotate (Vector3.down * speedRotation);
}
if (Input.GetKey (KeyCode.D) || Input.GetKey (KeyCode.RightArrow)) {
player.transform.Rotate (Vector3.up * speedRotation);
}
}
if (Input.GetKey (KeyCode.S) || Input.GetKey (KeyCode.DownArrow)) {
player.transform.position -= player.transform.forward * speedBackward * Time.deltaTime;
if (Input.GetKey (KeyCode.A) || Input.GetKey (KeyCode.LeftArrow)) {
player.transform.Rotate (Vector3.up * speedRotation);
}
if (Input.GetKey (KeyCode.D) || Input.GetKey (KeyCode.RightArrow)) {
player.transform.Rotate (Vector3.down * speedRotation);
}
}
if (Input.GetKey (KeyCode.W) || Input.GetKey (KeyCode.UpArrow)) {
if (Input.GetKey (KeyCode.LeftShift)) {
player.transform.position += player.transform.forward * speedForward * Time.deltaTime;
}
player.transform.position += player.transform.forward * speedForward * Time.deltaTime;
}
}
}
А чтобы уж совсем идеально было... при одновременном нажатии W и S происходит движение вперед, что сделать чтобы объект стоял на месте?