2016-04-07 25 views
0

C# üzerinde çalıştığım bir kod parçasıyla ilgili bir sorun yaşıyorum.Oyuncu C# kodunda tırmanış kodu

Bu kodun amacı, oyuncuyu yukarı ve ileriye doğru hareket ettirerek, önündeki 1x1x1'lik bir blok üzerinde durması ve 1x2x1 veya daha yüksek olan herşeyi aşmasına izin vermemesidir. ama bir sorun yaşıyorum, Image. Daha da ötesi 0,0,0'dan aldığım en kötü durum. Biri bana yardım edebilir mi?

Kodu: controller.Move için argüman bir hareket vektörü ziyade mutlak pozisyon (bu senin kodun kalan anlaşılacağı ne) olduğu varsayımına dayanarak

  //Player Climbs Up One Block Heights But Dose Not Climb Anything Higher 
    if ((PlayerClimAction.posOneHit == true) && (PlayerClimAction.posTwoHit == false)) 
     { 


     // Moves the Player Up By 0.9 
     controller.Move ((transform.position + transform.up * (float) 0.9f) * Time.deltaTime); 

     // Moves The Player Forward By 0.9 
     controller.Move ((transform.TransformDirection (input) * (float) 0.9f) * Time.deltaTime); 

     //Debug 
     print("Up Vector3: " + (transform.position + transform.up * (float) 0.9f) * Time.deltaTime); 

     print("////////////////////////////////////////////////"); 

     print ("Forward: " + (transform.TransformDirection (input) * (float) 0.9f) * Time.deltaTime); 

     // Reset Triggers 
     PlayerClimAction.posOneHit = false; 
     PlayerClimAction.posTwoHit = false; 


    }else 
    { 
     controller.Move (motion * Time.deltaTime); // Move Normaly 
    } 
+0

Tamam, bu biraz yardımcı olabilir. [Image] (http://postimg.org/image/bn7j5uhbx/): Bu, neler olduğuna dair bir görsel. –

cevap

1

Bilgi için Tone'a teşekkürler. o sayesinde benim kodunu düzenlemek ve bu onu değiştirmek mümkün oldu:

 //Player Climbs Up One Block Heights But Dose Not Climb Anything Higher 
    if ((PlayerClimAction.posOneHit == true) && (PlayerClimAction.posTwoHit == false)) 
     { 

     // Moves the Player Up By 0.5 
     controller.Move ((transform.up * (float) 0.5f)); 

     // Moves The Player Forward 
     controller.Move (motion * Time.deltaTime); // Move Normaly 


     // Reset Triggers 
     PlayerClimAction.posOneHit = false; 
     PlayerClimAction.posTwoHit = false; 

    }else 
    { 
     controller.Move (motion * Time.deltaTime); // Move Normaly 
    } 

Sadece else açıklamada düzenli hareketin aynısı olan tırmanış ileri hareketini değiştirir, yani mesafe olduğu için ve oyuncunun normal bir şekilde hareket edeceğini ve Ton'un önerisinin controller.Move ((transform.position + transform.up * (float) 0.9f) * Time.deltaTime); ile controller.Move (transform.up * (float) 0.9f * Time.deltaTime); arasında değişmesi gerektiğinden dolayı, gerçekten işleri düzeltmemde bana yardımcı oldu. Yayına bakan herkese TY

.

0

hat

controller.Move ((transform.position + transform.up * (float) 0.9f) * Time.deltaTime); 

okumalısınız

controller.Move (transform.up * (float) 0.9f * Time.deltaTime); 
Öte yandan controller.Move için argüman mutlak pozisyon olması gerekiyorsa

çeşitli sorunlarla bir

) controller.Move çarpar Time.deltaTime tarafından transform.position ilk telefon var. Bu, tüm eksenlerde hareket ile sonuçlanacaktır (ve bu yüzden 0,01'den daha da kötüye gitmesine neden olur)

b) controller.Move numaralarına yapılan ikinci ve üçüncü aramalar, hesaplamada transform.Position'u içermez. transform.TransformDirection ve mostion temsili). Ayrıca bir yazım hatası olduğunu ve motion olmalıdır.

+0

Öncelikle şu ana kadarki yardımlarınız için teşekkürler: D 'private CharacterController controller;' ve 'controller = GetComponent ();' Bu, denetleyicinin kodudur. 'CharatorController' değişken türünü kullanıyorum. Bana yardım ederse söyle. Değişiklikleri denedim ve yaptıkları her şey daha önce olduğu gibi aynı anda hedef yönündeki oyuncuya ping atmak oldu ama şimdi aşırı bir değere. öneri –

+0

ve 'TransformDirection (giriş)' için anahtar, oynatıcının, anahtar girişi, WASD veya Yukarı Aşağı Sağa Sol, –

+0

numaralı yazım tabanına dayandırdığı yöne doğru çürütüyor. Onları sevmelisin –