我如何创建地形区域的航点数组?

时间:2016-10-02 10:05:15

标签: c# unity3d

我有很多飞行物体,我需要给它们一些航点。 我想要的是让它们以自由的风格在地形区域内飞行。

是否可以使用航点进行操作?

在Main.cs脚本的主摄像头检查器的屏幕截图中,我有实例点,大小为1,元素为0.元素位于层次结构InstancePoint上。在InstancePoint中,我有一个获取Way Points的脚本Trace。

在这种方式中,对象应该在两者之间飞行。现在Way Points大小为0,我想知道是否有可能创建一些GameObjects作为将成为Terrain区域的航点,因此对象将围绕Terrain区域飞行但是自由风格而不仅仅是3-4个航点之间?或者逻辑应该是别的东西而没有分数?

Screenshot

这是Trace脚本:

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 );
  }
}

1 个答案:

答案 0 :(得分:0)

使用Unity附带的动画制作器,而不是试图让你的飞行物体以这种方式使用脚本。

您可以使用关键帧选择不同的位置(航点),并使用内置工具创建平滑的动画曲线。然后,如果您需要更改此行为,只需使用脚本将动画切换为更合适的内容。

关于该主题的介绍性视频&gt; Animation in Unity