2012-03-10 6 views
6

Tôi đang bắt đầu phát triển của mình bằng Unity. tôi đang làm một cái gì đó như thế:Unity3D C# tính toán chuyển tiếp chính xác sau khi quay

if(Input.GetKey(KeyCode.A))newValues[1]-=this.turnSpeed*(float)Time.deltaTime; 
    if(Input.GetKey(KeyCode.D))newValues[1]+=this.turnSpeed*(float)Time.deltaTime; 
    transform.Rotate(0, newValues[1], 0); 


    if(Input.GetKey(KeyCode.W))newValues[0]+=this.speed*transform.forward.z*(float)Time.deltaTime; 
    if(Input.GetKey(KeyCode.S))newValues[0]-=this.speed*transform.forward.z*(float)Time.deltaTime; 


    transform.position = new Vector3(transform.position.x, transform.position.y, (float)newValues[0]); 

Vì vậy, tôi xoay và tôi có thể di chuyển, nhưng nó di chuyển chỉ trong dòng Z, tôi biết tôi đang kêu gọi phong trào cụ thể Z. Nhưng với Javascript tôi có thể làm điều gì đó

 transform.forward+=this.speed*transform.forward*(float)Time.deltaTime; 

Vì vậy, tôi không cần phải làm quá trình vector mới và sao chép vào một biến riêng biệt và nó hoạt động như một nét duyên dáng, sử dụng luân chuyển và sử dụng như định hướng cho mình khi nó xoay.

+0

Bạn có lẽ nên sửa tiêu đề và thẻ của mình. Thẻ thống nhất như được sử dụng đề cập đến vùng chứa tiêm phụ thuộc trong khối ứng dụng MS. Có thể bạn đang đề cập đến Unity-3D, nếu điều này là để chơi game, bạn có thể muốn thêm một thẻ thích hợp. – Tod

+0

Điều gì sẽ xảy ra nếu bạn đặt 'transform.forward + = this.speed * transform.forward * (float) Time.deltaTime;' trong mã C#? Javascript và C# từng biên dịch sang cùng ngôn ngữ trung gian .NET, vì vậy hầu hết mọi thứ có thể có trong một là có thể trong ngôn ngữ khác, nếu được mã hóa một chút khác nhau. –

+0

Nó không hoạt động, nó là một biến chỉ đọc – Lefsler

Trả lời

7

bạn có thể hiểu sai cách sử dụng transform.forward. transform.forward chỉ là một vectơ để cho bạn biết hướng đối mặt của gameObject của bạn là gì, nó phụ thuộc vào transform.rotation.

Nếu bạn muốn di chuyển GameObject của bạn, luôn luôn sử dụng transform.position:

transform.position += this.speed * transform.forward * (float)Time.deltaTime; 
+1

Cảm ơn, nhưng làm thế nào tôi thực hiện luân chuyển? – Lefsler

+2

chủ đề rất cũ, nhưng muốn làm sống lại nó như bạn đã đề cập "Nếu bạn muốn di chuyển GameObject của bạn, luôn luôn sử dụng transform.position" thực sự nếu đối tượng trò chơi là rigidbody thì nó sẽ được di chuyển bằng cách thêm lực như sửa đổi trực tiếp biến đổi dẫn đến hành vi không thực tế. Nhưng đối với các cơ quan động học, câu của bạn là đúng – Eklavyaa

+0

bạn nói đúng, @Eklavyaa – Chchwy