Unity插件 Dotween 组件dotweenpath 如何在代码中添加轨迹

Unity插件 Dotween 组件dotweenpath 如何在代码中添加轨迹,第1张

typedef struct lista{

struct lista *next

int data

}list

void insert(list *h)

void del(list *h)

int main()

{

int flag

list *head=(list *)malloc(sizeof(list))

head->next=NULL

while(1)

{

有几种方式可以做到

采用Dotween或者Itween这种缓动插件来做,在其中可以设置路径点,然后根据路径点移动。相对来说比较简单

通过代码实现, 根据初中的物理知识(应该是初中的)抛物线运动在水平方向是匀速的,垂直方向上是v=a*t(v是速度,a是加速度,t是时间).也就是说只要得到垂直方向初始化速度,让水平方向和垂直方向各自运行就可以了.

如果知道目标(距离)和水平速度,就能得到飞行的时间.time=distance/speed在time这段时间内,炮d用1/2的时间上升,1/2的时间下降.炮d发出时在垂直方向上的速度是多少呢?我们可以反过来看,在最顶点时炮d速度是0,经过1/2的时间下落到平面,根据v=a*t(也就是speed=重力加速度*1/2*时间),这样就得到了垂直方向的初始化速度.然后用逻辑控制垂直方向和水平方向各自运行就可以了.

大致写了一段逻辑如下:

public class Bullet : MonoBehaviour  

{  

    public const float g = 9.8f  

   

    public GameObject target  

    public float speed = 10  

    private float verticalSpeed  

    private Vector3 moveDirection  

   

    private float angleSpeed  

    private float angle  

    void Start()  

    {  

       float tmepDistance = Vector3.Distance(transform.position, target.transform.position)  

        float tempTime = tmepDistance / speed  

        float riseTime, downTime  

        riseTime = downTime = tempTime / 2  

         verticalSpeed = g * riseTime  

        transform.LookAt(target.transform.position)  

   

        float tempTan = verticalSpeed / speed  

        double hu = Math.Atan(tempTan)  

        angle = (float)(180 / Math.PI * hu)  

        transform.eulerAngles = new Vector3(-angle, transform.eulerAngles.y, transform.eulerAngles.z)  

        angleSpeed = angle / riseTime  

   

        moveDirection = target.transform.position - transform.position  

    }  

    private float time  

    void Update()  

    {  

        if (transform.position.y < target.transform.position.y)  

        {  

            //finish  

            return  

        }  

        time += Time.deltaTime  

        float test = verticalSpeed - g * time  

        transform.Translate(moveDirection.normalized * speed * Time.deltaTime, Space.World)  

        transform.Translate(Vector3.up * test * Time.deltaTime,Space.World)  

        float testAngle = -angle + angleSpeed * time  

        transform.eulerAngles = new Vector3(testAngle, transform.eulerAngles.y, transform.eulerAngles.z)  

    }  

}创建一个A物体用来移动,B物体是终止点。然后挂脚本运行即可。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11493227.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存