Beispiel #1
0
        public void CreateMeshes()
        {
            Clear();

            int i = 0;

            foreach (CubicBezierCurve curve in spline.GetCurves())
            {
                GameObject go = new GameObject("SplineMesh" + i++, typeof(MeshFilter), typeof(MeshRenderer), typeof(MeshBender), typeof(MeshCollider));
                go.transform.parent        = transform;
                go.transform.localRotation = Quaternion.identity;
                go.transform.localPosition = Vector3.zero;
                go.transform.localScale    = Vector3.one;
                //go.hideFlags = HideFlags.NotEditable;

                go.GetComponent <MeshRenderer>().material = material;
                MeshBender mb = go.GetComponent <MeshBender>();
                mb.SetSourceMesh(mesh, false);
                mb.SetRotation(Quaternion.Euler(rotation), false);
                mb.SetCurve(curve, false);
                mb.SetStartScale(scale, false);
                mb.SetEndScale(scale);
                meshes.Add(go);
            }
        }
        public void CreateMeshes()
        {
            foreach (GameObject go in meshes)
            {
                if (gameObject != null)
                {
                    if (Application.isPlaying)
                    {
                        Destroy(go);
                    }
                    else
                    {
                        DestroyImmediate(go);
                    }
                }
            }
            meshes.Clear();

            float currentLength = 0;
            int   i             = 0;

            foreach (CubicBezierCurve curve in spline.GetCurves())
            {
                GameObject go = new GameObject("SplineMesh" + i++, typeof(MeshFilter), typeof(MeshRenderer), typeof(MeshBender), typeof(MeshCollider));
                go.transform.parent        = transform;
                go.transform.localRotation = Quaternion.identity;
                go.transform.localPosition = Vector3.zero;
                go.transform.localScale    = Vector3.one;
                //go.hideFlags = HideFlags.NotEditable;

                go.GetComponent <MeshRenderer>().material = material;
                MeshBender mb = go.GetComponent <MeshBender>();
                mb.SetSourceMesh(mesh, false);
                mb.SetRotation(Quaternion.Euler(rotation), false);
                mb.SetCurve(curve, false);

                float startRate = currentLength / spline.Length;
                currentLength += mb.curve.Length;
                float endRate = currentLength / spline.Length;

                mb.SetStartScale(startScale + (endScale - startScale) * startRate, false);
                mb.SetEndScale(startScale + (endScale - startScale) * endRate, false);

                mb.SetStartRoll(startRoll, false);
                mb.SetEndRoll(endRoll);
                meshes.Add(go);
            }
        }
    protected override void Create()
    {
        if (Mesh == null)
        {
            return;
        }

        int index = meshChildStartIndex;

        foreach (CubicBezierCurve curve in spline.GetCurves())
        {
            Transform child = null;
            if (index >= transform.childCount)
            {
                GameObject go = new GameObject("SplineMesh" + (index - meshChildStartIndex), typeof(MeshFilter), typeof(MeshRenderer), typeof(MeshBender));
                go.GetComponent <MeshRenderer>().material = Material;
                go.layer = transform.gameObject.layer;
                child    = go.transform;
                child.transform.parent = transform;
            }
            else
            {
                child = transform.GetChild(index);
            }

            child.localRotation        = Quaternion.identity;
            child.localPosition        = Vector3.zero;
            child.transform.localScale = Vector3.one;

            MeshBender mb = child.GetComponent <MeshBender>();
            mb.SetSourceMesh(Mesh, false);
            //mb.SetRotation(Quaternion.Euler(rotation), false);
            mb.SetCurve(curve, false);
            mb.SetStartScale(Scale, false);
            mb.SetEndScale(Scale);

            index++;
        }

        //delete unused
        int startIndex = transform.childCount - 1;

        for (int j = startIndex; j >= index; j--)
        {
            DestroyImmediate(transform.GetChild(j).gameObject);
        }
    }
Beispiel #4
0
    private void Init()
    {
        //Block of code came from Spline asset
        string generatedName     = "generated by " + GetType().Name;
        var    generatedTranform = transform.Find(generatedName);

        generatedModelGameObject = generatedTranform != null ? generatedTranform.gameObject : UOUtility.Create(generatedName, gameObject,
                                                                                                               typeof(MeshFilter),
                                                                                                               typeof(MeshRenderer),
                                                                                                               typeof(MeshBender));

        generatedModelGameObject.GetComponent <MeshRenderer>().material = material;

        meshBender = generatedModelGameObject.GetComponent <MeshBender>();
        spline     = GetComponent <Spline>();

        meshBender.Source = SourceMesh.Build(mesh)
                            .Rotate(Quaternion.Euler(rotation))
                            .Scale(scale);
        meshBender.Mode = MeshBender.FillingMode.StretchToInterval;
        meshBender.SetInterval(spline, 0, 0.01f);
    }
    public void CreateMeshes()
    {
        foreach (GameObject go in meshes)
        {
            if (gameObject != null)
            {
                if (Application.isPlaying)
                {
                    Destroy(go);
                }
                else
                {
                    DestroyImmediate(go);
                }
            }
        }

        int i = 0;

        foreach (CubicBezierCurve curve in spline.GetCurves())
        {
            GameObject go = new GameObject("SplineMesh" + i++, typeof(MeshFilter), typeof(MeshRenderer), typeof(MeshBender), typeof(MeshCollider));
            go.transform.parent        = transform;
            go.transform.localRotation = Quaternion.identity;
            go.transform.localPosition = Vector3.zero;
            go.transform.localScale    = Vector3.one;
            //go.hideFlags = HideFlags.NotEditable;

            go.GetComponent <MeshRenderer>().material = material;
            MeshBender mb = go.GetComponent <MeshBender>();
            mb.SetSourceMesh(mesh, false);
            mb.SetRotation(Quaternion.Euler(rotation), false);
            mb.SetTranslation(new Vector3(0, YOffset, ZOffset), false);
            mb.SetCurve(curve, false);
            mb.SetStartScale(scale, false);
            mb.SetEndScale(scale);
            meshes.Add(go);
        }
    }
Beispiel #6
0
    private void Init()
    {
        if (m_Spline != null && m_Mesh != null && m_Material != null)
        {
            string generatedName     = "Mesh";
            var    generatedTranform = transform.Find(generatedName);
            m_Generated = generatedTranform != null ? generatedTranform.gameObject : UOUtility.Create(generatedName, gameObject,
                                                                                                      typeof(MeshFilter),
                                                                                                      typeof(MeshRenderer),
                                                                                                      typeof(MeshBender));

            m_Generated.GetComponent <MeshRenderer>().material = m_Material;

            meshBender = m_Generated.GetComponent <MeshBender>();
            // m_Spline = GetComponent<Spline>();

            meshBender.Source = SourceMesh.Build(m_Mesh)
                                .Rotate(Quaternion.Euler(m_Rotation))
                                .Scale(m_Scale);
            meshBender.Mode = MeshBender.FillingMode.Once;
            meshBender.SetInterval(m_Spline, 0);
        }
    }