您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 学习培训 > Unity编程 >
    Unity3D的Waypoint(路点)
    时间:2015-03-17 09:14 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印



    Unity3D的Waypoint(路点) 。Unity3D官方网站上有个非常好的例子,能够“完美”解决路点的需求。

    以下是没有使用Quaternion (四元数)这个高深的类做的算法简化,使用的是更加方便的Vector3.


    实现分为两步:

    1:路点间的直线行走 2:解决突然转向的问题,让转向平滑


    解决方案1


    每个Waypoint是一个trigger。角色仅仅向着自己的target方向前进,就是z轴的正方向。

    运动的方法如下:


    var fMoveSpeed : float = 4.0; // 角色的移动速度
    function Update()
    {
    transform.Translate( 0, 0, fMoveSpeed );
    }
    多个Waypoint之间的连线形成一条路,存储所有的Waypoint需要用到数组
    var aWaypoint : Transform[]; // 路点数组


    将JS代码作为组件给角色。用gameObject的Cube作为路点。先在Scene面板内创建所有路点。

    然后依序拖入角色的 aWaypoint 变量内,这时此变量的长度会自增。拖动的顺序必须是路点的顺序,

    所以可以使用更方便的方法,在变量下面有个Unity提供的变量Size,手动填入路点数量。

    这时Unity会在下面直接创建填入数量的列表。点击每行最后面的圆圈。会弹出一个面板“Select Transform”,

    这里有本场景内的所有物件,如果路点的名字比较给力那么和数组元素一一对应添加即可。

    为了让路点数量统一,在代码里需要有个数组长度变量,以便和这个长度相同,放置造成数组越界。


    var nWaypointNum : int = 0; // 路点的数量
    每个路点设置为Trigger。物件添加Rigibody属性。然后扩充刚才的代码
    var nWaypointNum : int;
    var aWaypoint : Transform[];
    var fMoveSpeed : float;
    private var nTargetWaypoint : int; //下一个路点的索引
    function Start()
    {
    nTargetWaypoint = 0;
    }
    function Update()
    {
    // 这里使用了一个技巧,就是通过向量减法,算出朝向下一个路点的方向向量。
    transform.forward = aWaypoint[nTargetWaypoint].position - transform.position; // 朝自己的z方向移动。 transform.Translate( 0, 0, fMoveSpeed * Time.deltaTime );
    }
    function OnTriggerEnter( go : Collider )
    {
    nTargetWaypoint++;
    Debug.Log(nTargetWaypoint);
    if( nTargetWaypoint >= 4 ) { nTargetWaypoint = 0; }
    }




    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。