一、需求
脱离编辑器,运行时添加点,动态生成管道、线缆等曲线Mesh。
二、Dreamteck Splines简单运用
这方面资料不多,只有官方文档全英参考,而且又介绍得不详细。
2个重要组件介绍:
SplineComputer:
最重要的样条曲线数据组件,Edit中提供了鼠标直接在编辑器场景中添加、删除、移动、旋转、缩放、法向、镜像、基准形状的功能,供在场景中编辑使用。
下方close是首尾闭合本曲线。
reverse是顺序反转,也就是第一个点变最后一个点。
右边加号和剪刀分别是Merge和Split,也就是将两个曲线物体混合成一个,或者将一个曲线物体分割成两个。
TubeGenerator:
Common中的Size是管道粗细,Faces中的Double——sided可以创建双面Mesh,Shape中的Sides是管道的原型截面多少条边,根据自己性能设置。
三、上代码,动态添加点,生成曲线mesh
using System;
using System.Collections;
using System.Collections.Generic;
using Dreamteck.Splines;
using UniRx;
using UnityEngine;
public class DynamicSpline : MonoBehaviour
{
private SplineComputer _splineComputer;
private TubeGenerator _tubeGenerator;
private Material _material;
void Start()
{
Vector3[] v3 = new Vector3[3] { new Vector3(1.509808f, -2.273857f, 22.09592f), new Vector3(1.509808f, 3.6f, 34.1f),new Vector3(1.509808f,-2.273857f,54.5f) };
for (int i = 0; i < v3.Length; i++)
{
v3[i].x += transform.position.x;
v3[i].z += transform.position.z;
v3[i].y += transform.position.y;
}
_material = Resources.Load<Material>("Material/TubeMaterial");
_splineComputer = gameObject.AddComponent<SplineComputer>();
for (int i = 0; i < 3; i++)
{
SplinePoint point = new SplinePoint(v3[i]);
_splineComputer.SetPoint(i, point);
}
_tubeGenerator = gameObject.AddComponent<TubeGenerator>();
_tubeGenerator.spline = _splineComputer;
//how to set the material?
}
}
但是需要自己弥补一下材质问题,手动设置可以,但是插件应该可以有方法能够设置,暂时没发现。