2016-10-02 8 views
-2

私はいくつかの飛行オブジェクトを持っており、私はそれらにいくつかのウェイポイントを与える必要があります。 私が望むのは、フリースタイルで地形の周りを飛行させることです。どのように地形領域のウェイポイント配列を作成できますか?

ウェイポイントで行うのは可能でしょうか?

Main.csスクリプトのメインカメラインスペクタのスクリーンショットには、インスタンスポイントがあります。サイズは要素0で1です。要素は、InstancePointの階層にあります。 InstancePointにはウェイポイントを取得するTraceスクリプトがあります。

このウェイポイントでは、オブジェクトが飛行する必要があります。ウェイポイントのサイズは0ですが、地形エリアになるウェイポイントとしてゲームオブジェクトを作成することは可能でしょうか?オブジェクトはテレインエリアを飛ぶようになりますが、3-4ウェイポイントだけでなくフリースタイルも飛びます。あるいは、ロジックが何か別のものになっていて、何の問題もないでしょうか?

Screenshot

これは、トレーススクリプトです:

using System; 
using UnityEngine; 
using System.Collections.Generic; 
using System.Text.RegularExpressions; 
using System.Linq; 

public class Trace: MonoBehaviour 
{ 
    public Material normalState; 
    public Material activeState; 

    public WayPoint[] wayPoints; 
    private WayPoint curWP = null; 


    public void Start() 
    { 
    foreach(var wp in wayPoints) 
     SetTrigger(wp, false); 

    if(wayPoints.Length > 0) 
    { 
     curWP = wayPoints[0]; 
     SetTrigger(curWP, true); 
    } 
    } 

    void SetTrigger(WayPoint wp, bool value) 
    { 
    wp.GetComponent<Collider>().isTrigger = value; 
    wp.GetComponent<Renderer>().material = value ? activeState : normalState; 
    } 

#if UNITY_EDITOR 
    [UnityEditor.MenuItem ("GameEditor/Collect route from priority of waypoints")] 
    static void DoSomething() 
    { 
    Trace curTrace = (Trace)FindObjectOfType(typeof(Trace)); 

    var list = new List<WayPoint>(); 
    var rgx = new Regex(@"\d+$"); 

    //Selection.gameObjects doesn't hold selection order 
    foreach(var obj in FindObjectsOfType(typeof(WayPoint))) 
    { 
     var wp = (WayPoint)obj; 

     list.Add(wp); 
     wp.name = rgx.Split(obj.name)[0] + wp.editorPriority.ToString("D2"); 
     wp.trace = curTrace; 
    } 

    list.Sort((t1, t2) => t1.editorPriority - t2.editorPriority); 
    //ths.wayPoints = list.Select((v) => v.gameObject).ToArray(); 
    curTrace.wayPoints = list.ToArray(); 
    } 
#endif 

    public Vector3 GetAtractionPoint() 
    { 
    return curWP.transform.position; 
    } 

    public void NextWayPoint() 
    { 
    SetTrigger(curWP, false); 

    var nextIndex = Array.FindIndex(wayPoints, (v) => v == curWP) + 1; 

    if(nextIndex == wayPoints.Length) 
     nextIndex = 0; 

    curWP = wayPoints[nextIndex]; 
    SetTrigger(curWP, true); 
    } 
} 

答えて

0

ではなく、ユニティに付属しているアニメーターを使用する方がはるかに簡単だろうスクリプトでこのように動作するためにあなたの飛行物体を取得しようとしています。

キーフレームでさまざまな場所(ウェイポイント)を選択し、組み込みのツールを使用して滑らかなアニメーションカーブを作成できます。次に、アニメーションをより適切なものに切り替えるためにスクリプトを使用するだけで、この動作を変更する必要がある場合。

トピックに関する紹介ビデオ>Animation in Unity

関連する問題