Follow Path -》 Unity3d通用脚本

PathDefinition.cs

 1 using UnityEngine;
 2 using System.Collections;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5
 6 public class PathDefinition : MonoBehaviour
 7 {
 8     public Transform[] LinePoint;
 9     List<string> test = new List<string>();
10
11     public IEnumerator<Transform> GetPathEnumeratror() {
12         if (LinePoint == null || LinePoint.Length < 1)
13             yield break;
14
15         int direction = 1;
16         int index = 0;
17
18         while (true) {
19             yield return LinePoint[index];
20
21             if (LinePoint.Length == 1) continue;
22
23             if (index <= 0) direction = 1;
24             else if (index >= (LinePoint.Length - 1)) direction = -1;
25
26             index = index + direction;
27         }
28     }
29
30     void OnDrawGizmos()
31     {
32         if (LinePoint == null && LinePoint.Length < 2) return;
33
34         /// filter null
35         var Points = LinePoint.Where(t => t != null).ToList();
36
37         if (Points.Count < 2) return;
38
39         for (int i = 1; i < LinePoint.Length; i++)
40         {
41             Vector3 start = LinePoint[i - 1].position;
42             Vector3 end = LinePoint[i].position;
43             Gizmos.DrawLine(start, end);
44         }
45
46     }
47 }

FollowPath.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class FollowPath : MonoBehaviour {

    public enum FollowType
    {
        MoveToward,
        Lerp
    }

    public FollowType Type = FollowType.MoveToward;

    public PathDefinition Path;

    public float Speed = 1;

    public float MaxDistanceToGoal = .1f;

    IEnumerator<Transform> _currentPoint;

    public void Start() {
        if (Path == null) {
            return;
        }

        _currentPoint = Path.GetPathEnumeratror();

        _currentPoint.MoveNext();

        //set position at start point
        if (_currentPoint.Current == null) return;

        transform.position = _currentPoint.Current.position;
    }

    void Update() {
        if (_currentPoint == null || _currentPoint.Current == null)  return;

        if(Type == FollowType.MoveToward)
            transform.position = Vector3.MoveTowards(transform.position,_currentPoint.Current.position,Speed*Time.deltaTime);
        else if(Type == FollowType.Lerp)
            transform.position = Vector3.Lerp(transform.position, _currentPoint.Current.position, Speed * Time.deltaTime);

        var distanceSquared = (transform.position - _currentPoint.Current.position).sqrMagnitude;
        if (distanceSquared < MaxDistanceToGoal * MaxDistanceToGoal) {
            _currentPoint.MoveNext();
        }
    }

}

代码 很简单 我就不注释了,比较适用于 路径 编辑 跟踪

时间: 2024-12-23 07:05:12

Follow Path -》 Unity3d通用脚本的相关文章

mMathf -》 Unity3d通用脚本

1 public class mMathf 2 { 3 /// <summary> 4 /// 辗转 相除法 求 最大公约数 5 /// a / b = k 6 /// a % b = r 7 /// 原理 gcd(a,b) = gcd(b,r) 8 /// 具体 原理 参考 9 /// http://caixinhua1010.blog.163.com/blog/static/10540100920102138139141/ 10 /// </summary> 11 /// &l

(转)unity3d中脚本生命周期(MonoBehaviour lifecycle)

自:http://blog.csdn.net/qitian67/article/details/18516503 最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必然要问出一个问题:这么多个方法,执行先后顺序是如何的呢?内部是如何进行管理的呢?于是在网上找了许多资料,发现了Richard Fine在2012年就已经发布了一篇文章,而且讲得算是相当深入,并且很有道理的,这里加上我的一些尝试与思考,分享给大家. 先贴上图,大家有个直观认识: 接下来,做出一下讲解:

【转】Unity3D中脚本的执行顺序和编译顺序

支持原文,原文请戳: Unity3D中脚本的执行顺序和编译顺序 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题. 事件函数的执行顺序 先说一下执行顺序吧. 官方给出的脚本中事件函数的执行顺序如下图:  我们可以做一个小实验来测试一下: 在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图所示,然后按照顺序将脚本绑定到对

Unity3D 中脚本执行的先后顺序

Unity3D本身自带有控制脚本执行先后顺序的方法: Edit ---> Project Settings ---> Script Execution Order  ---> 值越小脚本会越先被执行 Unity3D 中脚本执行的先后顺序,码迷,mamicode.com

U3D——Unity3D的脚本-script入门

 Unity3D的基本操作很容易就能掌握了,接下来就是游戏系统的核心部分:脚本. 什么是Script(脚本)?简而言之,就是使用代码来执行一系列动作命令的特殊文本,它需要编译器来从新解读.U3D内部如何解读脚本,这不是我们所要关心的-这是引擎开发人员的活,我们所要知道的就是脚本的使用规则. [三种语言的特点] U3D支持C#,JavaScript,BOO三种语言格式的代码编写.首先来简单介绍下这三种语言的特点: 对U3D来说,这是入门级的脚本语言,U3D内置的函数都能通过JS方便的调用.语法

shell通用脚本启动

Linux下shell通用脚本启动jar(微服务) vim app_jar.sh #!/bin/bash #source /etc/profile # Auth:Liucx # Please change these parameters according to your real env. # set Java Home: Remember that dolphin only supports JDK8! JAVA_HOME=/usr/java/jdk1.8.0_162 # applicat

Unity3d动画脚本 Animation Scripting

[狗刨学习网] 也许这一篇文章的内容有点枯燥,但我要说的是如果你想深入的了解游戏引擎是如何处理动画片断或者素材并 让玩家操控的角色动起来栩栩如生. 动画脚本 Animation Scripting Unity's 动画系统允许你创建一个漂亮的动画蒙皮角色. 动画系统支持动画融合,混合,添加动画,步调周期时间同步.动画层.控制动画回放的所有方面(时间,速度,混合权重) 每个顶点有1.2.4个骨骼影响的mesh,基于物理系统的布娃娃系统,另外还有程序动画.为了获得最佳效果推荐您在制作模型和动画绑定前

【转】Unity3D中脚本的执行顺序和编译顺序(vs工程引用关系)

http://www.cnblogs.com/champ/p/execorder.html 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题. 事件函数的执行顺序 先说一下执行顺序吧. 官方给出的脚本中事件函数的执行顺序如下图:  我们可以做一个小实验来测试一下: 在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图所示

(转)Unity3D中脚本的执行顺序和编译顺序(vs工程引用关系)

自:http://www.cnblogs.com/champ/p/execorder.html 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题. 事件函数的执行顺序 先说一下执行顺序吧. 官方给出的脚本中事件函数的执行顺序如下图:  我们可以做一个小实验来测试一下: 在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图