实现平滑移动——路径点法

想要实现某个对象沿着某条路径进行平滑的移动,可以采用路径点法,大概就是使用transform.translate不断朝着下一个点进行移动,然后营造出平滑的效果。

第一种:在前进的路上放置许多的路标,并且将他们存储在数组里面,然后到达某个点再将下一个点拿出来,然后不断朝着点移动。

接下来是具体例子:

路径点法

接下来讲解具体的实现方法


在一个父物体下面放了许多的路径点,然后通过代码将他们都放在一个数组里面。

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

public class WayPoint : MonoBehaviour
{
    public Transform[] wayPoints;
    private void Awake()
    {
        wayPoints = new Transform[transform.childCount];
        for (int i = 0; i < transform.childCount; i++)
        {
            wayPoints[i] = transform.GetChild(i);
        }
    }
    // Update is called once per frame
    void Update()
    {
        
    }
}

这个脚本是挂载在WayPoints这个物体上面,然后通过一个for循环将数组都放进去,注意顺序,因为放进去的顺序是从下面第一个子物体开始放入一直到最后一个子物体。

然后,我们设置了一个character,也就是那个大球。

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Unity.Collections;
using UnityEngine;

public class Character : MonoBehaviour
{
    public WayPoint wayPoint;
    private int index=0;
    private float speed = 5f;
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        Move();
    }
    private void Move()
    {
        if(index >wayPoint .wayPoints.Length-1 )
        {
            return;
        }
        transform.Translate((wayPoint.wayPoints[index].transform.position - transform.position).normalized * Time.deltaTime * speed);
        if(Vector2 .Distance (wayPoint.wayPoints[index].transform.position , transform.position)<=0.2f)
        {
            index++;
        }
    }    
}

注意是要将脚本在unity的面板上面绑好WayPoint这个脚本,接下来讲解代码,第一个index >wayPoint .wayPoints.Length-1 ,防止超出了数组的范围导致报错。

transform.Translate((wayPoint.wayPoints[index].transform.position - transform.position).normalized * Time.deltaTime * speed);
if(Vector2 .Distance (wayPoint.wayPoints[index].transform.position , transform.position)<=0.2f)
{
    index++;
}

这个就具体讲解了移动的方式,并且在到达下一个点的时候索引增加,这里是计算距离很小的时候就认为已经到达,Vector2 .Distance函数是求两个点的距离。关于translate的移动在之前的文章已经讲解过,不明白可以去查看。

最后就能够实现上面的效果,看起来很简单吧,所以动手试一下吧。

但是看起来感觉不太平滑,所以我们引入更加细致的方法——贝塞尔曲线。大家可以去搜一搜,这个讲解的很多,这里就暂时不做介绍,究其根本就是路径变得特别多,然后显得比较平滑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值