> 文章列表 > unity物体运动经过特定点并绘出轨迹

unity物体运动经过特定点并绘出轨迹

unity物体运动经过特定点并绘出轨迹

经过线如果有圆滑可以参考

Unity物体运动时画出轨迹_天人合一peng的博客-CSDN博客

并修改里面的数值轨迹会有变化

float angle = Mathf.Min(1, Vector3.Distance(this.transform.position, targetPos) / distanceToTarget) * 45;
            this.transform.rotation = this.transform.rotation * Quaternion.Euler(Mathf.Clamp(-angle, -42, 42), 0, 0);

经过特定点时螺钉出现并有动画

 

1 空物体加linerender设置

 2 空物体设置调用linerender绘制线

 linemark.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;public class LineMark : MonoBehaviour {private GameObject clone;  private LineRenderer line;  private int i;  public GameObject obs;  public GameObject run;  Vector3 RunStart;Vector3 RunNext;// Use this for initializationvoid Start () {RunStart = run.transform.position;clone = (GameObject)Instantiate(obs, run.transform.position, run.transform.rotation);//克隆一个带有LineRender的物体   line = clone.GetComponent<LineRenderer>();//获得该物体上的LineRender组件  i = 0;}// Update is called once per frame  void Update () {  RunNext = run.transform.position;if (RunStart != RunNext) {i++;line.SetVertexCount(i);//设置顶点数 line.SetPosition(i-1, run.transform.position);}RunStart = RunNext;}  
}

3 运动小球

 cablelinerun.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;public class CableLineRun : MonoBehaviour
{public Transform cableRun;   //要到达的目标public Transform cableStart;   //要到达的目标public Transform target01;   //要到达的目标public Transform target02;   //要到达的目标public Transform target03;   //要到达的目标// 固定public GameObject GuDing01;public GameObject GuDing02;public GameObject GuDing03;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){if (Input.GetKey(KeyCode.A)){cableRun.DOLocalMove(target01.localPosition, 5f).OnComplete(onCompleteTarget01);}if (Input.GetKey(KeyCode.B)){}}void onCompleteTarget01(){GuDing01.SetActive(true);// 旋转的同时移动var s= DOTween.Sequence();s.Append(GuDing01.transform.DOLocalMoveZ(40,3f));s.Join(GuDing01.transform.DOLocalRotate(new Vector3(0, 0, 1000),3f));cableRun.DOLocalMove(target02.localPosition, 5f).OnComplete(onCompleteTarget02);}void onCompleteTarget02(){GuDing02.SetActive(true);// 旋转的同时移动var s= DOTween.Sequence();s.Append(GuDing02.transform.DOLocalMoveZ(-36f,3f));s.Join(GuDing02.transform.DOLocalRotate(new Vector3(0, 0, 1000),3f));cableRun.DOLocalMove(target03.localPosition, 5f).OnComplete(()=>{GuDing03.SetActive(true);// 旋转的同时移动var s= DOTween.Sequence();s.Append(GuDing03.transform.DOLocalMoveZ(-190f,3f));s.Join(GuDing03.transform.DOLocalRotate(new Vector3(0, 0, 1000),3f));});}
}

4 start小球

 5 三个经过点

 6 三个经过点上的螺钉

 7 效果