J'utilise le kit de fuite pour réaliser des marques de dérive.
Effet
Production traînante :
Code:
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Animations;
public class TrailMgr : MonoSingleton<TrailMgr> //继承单例,可自己实现
{
private float time; //拖尾持续时间
private Transform parent; //放置拖尾的父物体
public GameObject trail; //拖尾预制体
public List<Transform> wheels; //获取车轮位置
bool isTrail; //拖尾效果是否持续中
private void Start()
{
time = trail.GetComponent<TrailRenderer>().time; //拖尾消失时间
parent = GameObject.Find("Trails").transform; //获取防止拖尾特效的父物体
}
//生成拖尾
public void InsTrail()
{
if (isTrail)
return;
//生成拖尾效果并跟随轮胎
wheels.ForEach(_ =>
{
var o = Instantiate(trail);
o.transform.parent = parent;
//这里使用ConstraintSource组件让拖尾跟随轮胎,也可以自己实现
ConstraintSource source = new ConstraintSource();
source.sourceTransform = _.transform;
source.weight = 1;
var v = _.transform.position;
//这里需要自己设置Y
o.transform.position = new Vector3(v.x, 0.6f, v.z);
o.GetComponent<PositionConstraint>().SetSource(0, source);
});
isTrail = true;
}
//停止漂移销毁拖尾
public void DriftOver()
{
if (parent.childCount == 0)
return;
parent.gameObject.Children().ForEach(_ =>
{
_.GetComponent<PositionConstraint>().constraintActive = false;
});
isTrail = false;
}
}
Configuration du composant ConstraintSource. Il est également possible de suivre les coordonnées XZ de la roue sans utiliser ce composant.
Enfin, tant que vous définissez vous-même les conditions pour appeler l'effet de fuite. Il est préférable d'ajouter le jugement de savoir si la roue touche le sol pour être plus réaliste (la méthode que j'utilise est le jugement du rayon de direction vers le bas de la roue).