Unity实现物体运动时画出轨迹

本文为大家分享了Unity实现物体运动时画出轨迹的具体代码,供大家参考,具体内容如下:

1、新建空物体,上赋LineRenderer

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

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;  
//   print ("GetMouseButtonDown");
//  }  
//  if (Input.GetMouseButton(0))  
//  {  
//   i++;  
//   line.SetVertexCount(i);//设置顶点数  
//   line.SetPosition(i - 1, Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 15)));//设置顶点位置   
//   print ("GetMouseButton");
//
//  }  


}  
}

4、运动小球和脚本

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、目标小球和运动设置的脚本

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、运行结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程教程

本文为大家分享了Unity2D游戏回旋镖实现的具体代码,供大家参考,具体内容如下:以下我举出2种同使用情况的回旋镖。那么回旋镖需要怎么做呢?任务清单如下回旋镖会自我旋转回旋镖达到一定距离会飞回来回旋镖对敌人 ...