Unity物体运动时画出轨迹

时间:2024-03-19 12:17:58

1, 新建空物体,上赋LineRenderer

Unity物体运动时画出轨迹

2, 新建空物体,把轨迹画出来,设计和脚本。

Unity物体运动时画出轨迹

3, LineMark的脚本是

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

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 initialization
	void Start () {
		RunStart = run.transform.position;
		clone = (GameObject)Instantiate(obs, run.transform.position, run.transform.rotation);//克隆一个带有LineRender的物体   
		line = clone.GetComponent<LineRenderer>();//获得该物体上的LineRender组件  
//		//line.SetColors(Color.blue, Color.red);//设置颜色  
//		//line.SetWidth(0.2f, 0.1f);//设置宽度  
		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;



		if (Input.GetMouseButtonDown(0))  
		{  
			clone = (GameObject)Instantiate(obs, obs.transform.position, transform.rotation);//克隆一个带有LineRender的物体   
			line = clone.GetComponent<LineRenderer>();//获得该物体上的LineRender组件  
			line.SetColors(Color.blue, Color.red);//设置颜色  
			line.SetWidth(0.2f, 0.1f);//设置宽度  
			i = 0;  
		}  
		if (Input.GetMouseButton(0))  
		{  
			i++;  
			line.SetVertexCount(i);//设置顶点数  
			line.SetPosition(i - 1, Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 15)));//设置顶点位置   
		}  




	}  
}

 

4,运动小球和脚本

Unity物体运动时画出轨迹

 

Run.cs

using UnityEngine;
using System.Collections;

public class Run : MonoBehaviour
{
	public GameObject target;   //要到达的目标
	public float speed = 10;    //速度
	private float distanceToTarget;   //两者之间的距离
	private bool move = true;    

	void Start()
	{
		//计算两者之间的距离
		distanceToTarget = Vector3.Distance(this.transform.position, target.transform.position);  
		StartCoroutine(StartShoot());
	}

	IEnumerator StartShoot()
	{

		while (move)
		{
			Vector3 targetPos = target.transform.position;

			//让始终它朝着目标
			this.transform.LookAt(targetPos);

			//计算弧线中的夹角
			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);
			float currentDist = Vector3.Distance(this.transform.position, target.transform.position);
			if (currentDist < 0.5f)
				move = true;
			this.transform.Translate(Vector3.forward * Mathf.Min(speed * Time.deltaTime, currentDist));
			yield return null;
		}
	}


}

 

5,目标小球和运动设置的脚本

Unity物体运动时画出轨迹

follew.cs

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

public class followme : MonoBehaviour {

	Rigidbody follew;
	// Use this for initialization
	void Start () {
		follew = GetComponent<Rigidbody> ();
	}
	
	// Update is called once per frame
	void Update () {

		transform.Translate (new Vector3(0.1f,0.1f,0.1f));
	}
}

6,运行结果

 

Unity物体运动时画出轨迹

 

Unity物体运动时画出轨迹