Saya telah memulai permainan baru yang tidak memerlukan mouse, sehingga meninggalkan gerakan ke keyboard. Saya telah mencoba menggabungkan 8 arah; atas, kiri, kanan, atas kanan dan seterusnya. Namun ketika saya menekan lebih dari satu tombol panah, kecepatan gerakannya menumpuk ( http://gfycat.com/CircularBewitchedBarebirdbat ). Bagaimana saya bisa mengatasi ini?
Ini bagian yang relevan dari kode saya:
var speed : int = 5;
function Update () {
if (Input.GetKey(KeyCode.UpArrow)) {
transform.Translate(Vector3.forward * speed * Time.deltaTime);
} else if (Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.RightArrow)) {
transform.Translate(Vector3.forward * speed * Time.deltaTime);
} else if (Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.LeftArrow)) {
transform.rotation = Quaternion.AngleAxis(315, Vector3.up);
}
if (Input.GetKey(KeyCode.DownArrow)) {
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}
unity
javascript
movement
eren_tetik
sumber
sumber
Jawaban:
Pisahkan kode pilihan arah Anda dari kode gerakan aktual.
Direction
dengan memeriksa tombol mana yang ditekan. Simpan sebagai vektor satuan (dinormalisasi).Direction
denganSpeed
dan dengan AndaDeltaTime
.sumber
Anda perlu mengambil jumlah dari arah, menormalkan itu, lalu kalikan dengan kecepatan.
Saya secara tangensial menjawab ini sebagai bagian dari respons saya terhadap Mencegah gerakan diagonal
Secara khusus:
sumber
"Vektor arah dinormalisasi" adalah bagaimana tugas ini biasanya didekati, dan seberapa sering saya melakukannya, tetapi belakangan ini saya hanya menjepit vektor gerakan yang dihasilkan. Biasanya mencapai hasil akhir yang sama dan kodenya jauh lebih sederhana:
Kode yang lebih sederhana hampir selalu lebih baik: E
sumber
ClampMagnitude
, bukankah itu kode yang sama denganNormalize * Constant
di disquise?moveSpeed
setelah menjepit dan mungkin menggabungkannya dengan perkalian dengandeltaTime
.