2016-08-04 57 views
0
using UnityEngine; 
using System.Collections; 

public class WaypointsMover : MonoBehaviour { 

    public float rotateSpeed = 2.0f; 

    private bool rotating; 

    void Update() { 
     StartCoroutine(TurnTowards(-transform.forward)); 
    } 

    IEnumerator TurnTowards(Vector3 lookAtTarget) {  

     if(rotating == false) { 
      Quaternion newRotation = Quaternion.LookRotation(lookAtTarget - transform.position); 
      newRotation.x = 0; 
      newRotation.z = 0; 

      for (float u = 0.0f; u <= 10.0f; u += Time.deltaTime * rotateSpeed) { 
       rotating = true; 
       transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, u); 

       yield return null; 
      } 
      rotating = false; 
     } 
    } 

    // Use this for initialization 
    void Start() { 

    } 
} 
  1. 沒有,如果我rotateSpeed的值更改爲10.0f或20.0f敵人將獲得一面會走一些地方上,然後將轉身到另一邊的事情。我怎麼能讓敵人在走到一邊時馬上轉身?爲什麼敵人定位在這個地方?爲什麼旋轉速度永不改變?

  2. 爲什麼在場景中的敵人位於建築物屋頂上時,我將它們放置在另一個地方?

  3. 我該如何設置航點?我無法在代碼方式中找到點。我知道,在for循環它是在原:

    爲(浮動U = 0.0F;Ù< = 1.0F; U + = Time.deltaTime * rotateSpeed){

我改變它到10.0f而不是1.0f,所以現在他們在屋頂上走得更長。但是,如果我想讓他們會在兩個領域之間去?

這是一個場景的截圖,右邊的建築物在運行遊戲時在屋頂上行走。左邊的兩個敵人(守衛)是主要玩家。相機我把它設置爲遵循第一衛隊。

我也注意到他們之間沒有空間,所以他們互相碰撞或互相打擾走路。我在哪裏或如何在他們之間設置更多空間,以便每個人都能走上自己的道路?

Scene

這是一個簡短的視頻剪輯我錄展示他們是如何行走,並在那裏他們都走:

Video Clip

+0

1-檢查您的敵人(AI)代碼我確信您正在設置位置。 2 - 我不知道每個敵人使用什麼腳本,但我確信你只有一個「WaypointsMover」實例(我認爲這是某種經理)。如果沒有,請粘貼敵方代碼和組件?謝謝。 – Cabrra

+0

@Cabrra我現在檢查我看到在對象選項卡中的導航窗口中的地形我檢查,使其導航靜態,然後我點擊烘烤。所以現在的敵人從他們在場景中的位置開始。但由於某種原因,他們首先在大樓下面,在那裏他們正在巡邏。我無法弄清楚爲什麼要去建築物。 –

+0

@Cabrra我查看了現在,我看到在對象選項卡中的導航窗口中的地形檢查,使其導航靜態,然後我點擊烘烤。所以現在的敵人從他們在場景中的位置開始。但由於某種原因,他們首先在大樓下面,在那裏他們正在巡邏。我無法弄清楚爲什麼要去建築物。 –

回答

0

您是否嘗試過在Quaternion.Slerp使用rotateSpeed()函數而不是var?由於Time.deltaTime具有相當低的值(首先它應該在〜0.0145左右),這將大大降低旋轉速度。如果rotateSpeed爲10.0f或20.0f,它不會有什麼不同,因爲它只會在最後更快(我還沒有嘗試執行它)

此外,Slerp將旋轉轉換爲看起來平滑,所以如果你想要立即轉換,只需將對象的旋轉設置爲你需要的值即可。

+0

我試過另一個腳本,它只能用兩個球體作爲路標。我遇到了與其他腳本一起使用兩個球體的這個奇怪的問題,但是如果我添加另一個球體,它會到達它並繞過它。或者如果我將圓柱體設置爲第二個航點,它將到達圓柱體並在其周圍走動,或者將繼續向圓柱體行進,並且不會返回到第一個航點。 –