Ejemplo n.º 1
0
    /// <summary>
    /// Create the mesh of legs
    /// </summary>
    private void BakeLegsMesh()
    {
        //Reduces the amount of points in LineRenderer
        currentLineRenderer.Simplify(0.05f);

        //Create the mesh of legs
        currentLineRenderer.BakeMesh(wheelRight.mesh, cam, true);
        currentLineRenderer.BakeMesh(wheelLeft.mesh, cam, true);
    }
Ejemplo n.º 2
0
    public static void SetMeshCollider(GameObject line)
    {
        LineRenderer lineRenderer = line.GetComponent <LineRenderer>();
        MeshCollider meshCollider;

        if (line.GetComponentInChildren <MeshCollider>() == null)
        {
            GameObject child = new GameObject("child");
            child.transform.position = line.transform.position;
            child.transform.SetParent(line.transform);
            meshCollider = child.AddComponent <MeshCollider>();
        }
        else
        {
            meshCollider = line.GetComponentInChildren <MeshCollider>();
        }

        Mesh mesh = new Mesh();

        try
        {
            lineRenderer.BakeMesh(mesh, true);
        }
        catch (System.Exception)
        {
        }
        finally
        {
            meshCollider.sharedMesh = mesh;
        }
    }
Ejemplo n.º 3
0
        public Mesh GetMesh()
        {
            var mesh = new Mesh();

            line.BakeMesh(mesh);
            return(mesh);
        }
Ejemplo n.º 4
0
        private void DrawMesh()
        {
            var mesh = new Mesh();

            _lineRenderer.BakeMesh(mesh);
            _meshCollider.sharedMesh = mesh;
        }
Ejemplo n.º 5
0
    public void generateCar()
    {
        transformPointsToZero();
        mesh = new Mesh();
        lineRenderer.BakeMesh(mesh, true);
        GetComponent <MeshCollider>().sharedMesh = mesh;
        GetComponent <MeshFilter>().mesh         = mesh;

        placeWheels();
        RespawnCoordinate = findMidPoint();

        newDrawnSpawn();

        GetComponent <MeshCollider>().convex = true;

        MeshCollider colMesh = gameObject.AddComponent <MeshCollider>();

        colMesh.sharedMesh = mesh;
        colMesh.convex     = true;
        colMesh.isTrigger  = true;

        _gm.setLine(this);

        rigidBody.isKinematic = false;

        isObjectActivated = true;
    }
Ejemplo n.º 6
0
    void CreateLineRendererMesh()
    {
        Mesh mesh = new Mesh();

        lRenderer.BakeMesh(mesh, mainCamera, true);
        GetComponent <MeshCollider>().sharedMesh = mesh;
    }
Ejemplo n.º 7
0
    private void SetMesh()
    {
        Mesh trajectoryMesh = new Mesh();

        _lineRenderer.BakeMesh(trajectoryMesh);
        _meshCollider.sharedMesh = trajectoryMesh;
    }
Ejemplo n.º 8
0
    // Funcion para creación de GameObject con LineRenderer para unir figuras erróneas.
    void SpawnLineGeneratorWrong()
    {
        GameObject myLineWrong = new GameObject();

        transLr = GetComponent <Transform>();

        myLineWrong.tag  = "FrameLineWrong";
        myLineWrong.name = "FrameLineWrong";

        myLineWrong.AddComponent <LineRenderer>();
        lr = myLineWrong.GetComponent <LineRenderer>();
        lr.useWorldSpace = false;
        lr.startWidth    = 0.1f;
        lr.endWidth      = 0.1f;
        lr.SetPosition(0, start);
        lr.SetPosition(1, finish);
        lr.sortingLayerName = "Line";

        lr.material = wrongColor;


        Mesh lineMesh = new Mesh();

        lr.BakeMesh(lineMesh);
        MeshCollider meshCollider = myLineWrong.gameObject.AddComponent <MeshCollider>();

        meshCollider.sharedMesh = lineMesh;

        allLines.Add(myLineWrong);
        myLineWrong.transform.position = new Vector3(transform.position.x, transform.position.y, -0.5f);
        myLineWrong.transform.position = new Vector3(transform.position.x, transform.position.y, 1);
        wrongSound.Play(0);
        score = score - 100;
    }
Ejemplo n.º 9
0
    public void Bake()
    {
        _rawLength = Vector3.Distance(_lineRenderer.GetPosition(0), _lineRenderer.GetPosition(1));
        _lineRenderer.BakeMesh(_mesh, true);
        _meshCollider.sharedMesh = _mesh;

        _isDirty = false;
    }
Ejemplo n.º 10
0
    // Start is called before the first frame update
    void Awake()
    {
        MeshCollider m    = gameObject.AddComponent <MeshCollider>();
        Mesh         mesh = new Mesh();

        l.BakeMesh(mesh, c, true);
        m.sharedMesh = mesh;
    }
Ejemplo n.º 11
0
 public void update(Vector2 input_pos, Vector2 output_pos, bool is_on_new)
 {
     update_position(input_pos, output_pos);
     update_colour(is_on_new);
     temp_mesh = new Mesh();
     rend.BakeMesh(temp_mesh, false);
     meshColl.sharedMesh = temp_mesh;
 }
Ejemplo n.º 12
0
    // Start is called before the first frame update
    private void Start()
    {
        // Заполняем опорное точки
        corners = new Vector3[this.transform.childCount];
        for (var i = 0; i < corners.Length; i++)
        {
            GameObject obj = transform.GetChild(i).gameObject;
            corners[i] = obj.transform.position;
            //отключение отрисовки объекта/
            obj.GetComponent <MeshRenderer>().enabled = false;
        }

        //настраиваем Line Renderer
        m_lineRenderer.positionCount = corners.Length;
        m_lineRenderer.SetPositions(corners);

        //сгенерировать всех соседей в одном сегменте
        //проверять только массив соседей

        //запекаем меш сетку из Line Renderer
        Mesh mesh = new Mesh();

        m_lineRenderer.BakeMesh(mesh, true);

        //создаем массив сегментов трассы
        //(каждый треугольник описан 3-мя точками из массива вершин)
        segments = new TrackSegment[mesh.triangles.Length / 3];

        //каждую итерацию цикла проходим через каждый треий элемент
        for (int i = 0; i < mesh.triangles.Length; i += 3)
        {
            segments[segmentCounter] = new TrackSegment();

            segments[segmentCounter].Points = new Vector3[3];
            //в первую точку записываем вершину первого индекса из массива вершин
            segments[segmentCounter].Points[0] = mesh.vertices[mesh.triangles[i]];
            segments[segmentCounter].Points[1] = mesh.vertices[mesh.triangles[i + 1]];
            segments[segmentCounter].Points[2] = mesh.vertices[mesh.triangles[i + 2]];

            segmentCounter++;
        }

        //отдельно можно продебажить сегменты
        if (!m_Debug)
        {
            return;
        }

        foreach (var segment in segments)
        {
            foreach (var point in segment.Points)
            {
                GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                sphere.transform.position   = point;
                sphere.transform.localScale = Vector3.one * 0.1f;
            }
        }
    }
Ejemplo n.º 13
0
    // Start is called before the first frame update
    void Start()
    {
        LineRenderer lineRenderer = transform.GetComponent <LineRenderer>();
        MeshCollider meshCollider = transform.gameObject.AddComponent <MeshCollider>();
        Mesh         mesh         = new Mesh();

        lineRenderer.BakeMesh(mesh, true);
        meshCollider.sharedMesh = mesh;
    }
Ejemplo n.º 14
0
    public GameObject CreateLeg(Leg leg, LineRenderer lineRenderer, float zOffset)
    {
        GameObject legObj = Instantiate(LegPrefab);

        lineRenderer.BakeMesh(legObj.GetComponent <MeshFilter>().mesh, true);
        MeshCollider meshCollider = legObj.GetComponent <MeshCollider>();

        meshCollider.sharedMesh = legObj.GetComponent <MeshFilter>().mesh;

        float MaxLineY = 0;
        float MinLineY = 1000f;

        for (int i = 0; i < lineRenderer.positionCount - 1; i++)
        {
            MinLineY = Mathf.Min(MinLineY, lineRenderer.GetPosition(i).y);
        }

        for (int k = 0; k < lineRenderer.positionCount - 1; k++)
        {
            MaxLineY = Mathf.Max(MaxLineY, lineRenderer.GetPosition(k).y);
        }

        float lineHeight      = MaxLineY - MinLineY;
        float playerHeight    = this.transform.position.y - FloorOffset.y;
        float upCharacterSize = lineHeight - playerHeight;

        if (upCharacterSize > 0f)
        {
            this.transform.SetPositionAndRotation(new Vector3(this.transform.position.x, this.transform.position.y + upCharacterSize, this.transform.position.z), this.transform.rotation);
        }

        Vector3 legPos = new Vector3();

        switch (leg)
        {
        case Leg.Left:
            legPos.x = -lineRenderer.GetPosition(lineRenderer.positionCount - 1).x + transform.position.x;
            legPos.y = -lineRenderer.GetPosition(lineRenderer.positionCount - 1).y + transform.position.y;
            legPos.z = LeftLegPosition.position.z;
            legObj.transform.SetParent(LeftLegPosition);
            legPos.z += zOffset;
            break;

        case Leg.Right:
            legPos.x = -lineRenderer.GetPosition(0).x + transform.position.x;
            legPos.y = -lineRenderer.GetPosition(0).y + transform.position.y;
            legPos.z = RightLegPosition.position.z;
            legObj.transform.SetParent(RightLegPosition);
            legPos.z += zOffset;
            break;
        }

        legObj.transform.position = legPos;
        legObj.GetComponent <MeshRenderer>().material = Mat_Line;
        Legs.Add(legObj);
        return(legObj);
    }
Ejemplo n.º 15
0
    // Start is called before the first frame update
    void Start()
    {
        //заполняем массив опорных точек трассы
        corners = new Vector3[transform.childCount];
        for (int i = 0; i < corners.Length; i++)
        {
            GameObject obj = transform.GetChild(i).gameObject;
            corners[i] = obj.transform.position;
            obj.GetComponent <MeshRenderer>().enabled = false;
        }

        //задаём значения linerenderer
        m_lineRenderer.positionCount = corners.Length;
        m_lineRenderer.SetPositions(corners);

        //из полученного LineRenderer запекаем mesh
        Mesh mesh = new Mesh();

        m_lineRenderer.BakeMesh(mesh, true);

        //создаём массив сегментов трассы
        //каждый треугольник уписываем треугольниками из массива вершин
        segments = new TrackSegment[mesh.triangles.Length / 3];
        int segmentsCounter = 0;

        for (int i = 0; i < mesh.triangles.Length; i += 3)
        {
            segments[segmentsCounter]        = new TrackSegment();
            segments[segmentsCounter].points = new Vector3[3];
            int nm = mesh.triangles[i];
            segments[segmentsCounter].points[0] = mesh.vertices[nm];
            nm = mesh.triangles[i + 1];
            segments[segmentsCounter].points[1] = mesh.vertices[nm];
            nm = mesh.triangles[i + 2];
            segments[segmentsCounter].points[2] = mesh.vertices[nm];
            segmentsCounter++;
        }

        if (!m_viewDebug)
        {
            return;
        }
        else
        {
            foreach (var segment in segments)
            {
                foreach (var point in segment.points)
                {
                    GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                    sphere.transform.position   = point;
                    sphere.transform.localScale = Vector3.one * 0.1f;
                }
            }
        }
    }
Ejemplo n.º 16
0
    public GameObject CreateGenericLineAgent(Agent agent, float lineWidth, string tagName, float zPosition, bool groupBySpecies, bool withMesh)
    {
        GameObject   newObject  = new GameObject(agent.AgentName);
        var          meshFilter = newObject.AddComponent <MeshFilter>();
        LineRenderer line       = newObject.AddComponent <LineRenderer>();

        line.useWorldSpace = true;
        line.positionCount = agent.AgentCoordinate.GetVector3Coordinates().Length;
        line.SetPositions(agent.AgentCoordinate.GetVector3Coordinates());
        //line.positionCount = agent.agentCoordinate.getVector2Coordinates().Length / 2;
        line.material   = lineMaterial;
        line.startWidth = lineWidth;
        line.endWidth   = lineWidth;

        if (withMesh)
        {
            Mesh mesh         = new Mesh();
            var  meshRenderer = newObject.AddComponent <MeshRenderer>();
            meshRenderer.sharedMaterial = lineMaterial;
            Material mat = new Material(Shader.Find("Specular"))
            {
                color = Color.red
            };
            meshRenderer.sharedMaterial = mat;
            //LineRenderer line = (LineRenderer)newObject.GetComponent(typeof(LineRenderer));

            line.BakeMesh(mesh);
            meshFilter.sharedMesh = mesh;
            Destroy(line);
        }



        RectTransform rt = newObject.AddComponent <RectTransform>(); //(newObject.AddComponent<RectTransform>()).GetComponent<RectTransform>();

        rt.SetParent(SceneManager.worldEnveloppeRT);
        rt.anchorMin = SceneManager.AnchorMin;
        rt.anchorMax = SceneManager.AnchorMax;
        rt.pivot     = SceneManager.Pivot;

        rt.anchoredPosition = new Vector3(0, 0, 0);
        Vector3 p = rt.localPosition;

        rt.localPosition = new Vector3(p.x, p.y, zPosition);

        SetAgentTag(newObject, tagName);
        if (groupBySpecies)
        {
            SetObjectSpecies(newObject, agent.Species);
        }

        AddAgentToContexte(agent.Species, newObject);

        return(newObject);
    }
Ejemplo n.º 17
0
    public GameObject CreateLine(GameObject startObject, GameObject endObject)     // draws a line betwen the center of 2 game objects
    {
        Vector2 startPosition = startObject.transform.position;
        Vector2 endPosition   = endObject.transform.position;
        Vector2 offset        = (endPosition - startPosition);

        GameObject currentLine = Instantiate <GameObject>(linePrefab);

        currentLine.transform.position = Vector2.zero;
        LineRenderer lr = currentLine.GetComponent <LineRenderer>();

        LineType lineProperties = currentLine.GetComponent <LineType>();

        lineProperties.lineValue = startObject.GetComponent <ConnectionControl>().lineValue;
        lineProperties.startNode = startObject;
        lineProperties.endNode   = endObject;


        //break line into 3 segments if certain conditions are met (Condition currently not active, it auto breaks lines into segments.)
        if (startPosition.x < endPosition.x || (startPosition.x > endPosition.x && startObject.tag == "Input Node"))
        {
            Vector2 tempEnd1 = new Vector2(Random.Range(startPosition.x + offset.x / 6.0f, startPosition.x + offset.x / 2.0f), startPosition.y);
            Vector2 tempEnd2 = new Vector2(tempEnd1.x, endPosition.y);

            Vector3[] positions = GetPosArray(startPosition, tempEnd1, tempEnd2, endPosition);

            lr.positionCount = positions.Length;
            lr.SetPositions(positions);
        }

        else if (startPosition.x > endPosition.x) //first click x position is higher than the second click x position, the line should be broken into 5 segments(6 points)
        {
            Vector2 tempEnd1 = new Vector2(startPosition.x + Random.Range(0.5f, 1.5f), startPosition.y);
            Vector2 tempEnd2 = new Vector2(tempEnd1.x, startPosition.y + (endPosition.y - startPosition.y) / Random.Range(2f, 4f));
            Vector2 tempEnd3 = new Vector2(endPosition.x - Random.Range(0.5f, 1.5f), tempEnd2.y);
            Vector2 tempEnd4 = new Vector2(tempEnd3.x, endPosition.y);

            Vector3[] positions = GetPosArray(startPosition, tempEnd1, tempEnd2, tempEnd3, tempEnd4, endPosition);

            lr.positionCount = positions.Length;
            lr.SetPositions(positions);
        }

        //Create a mesh collider to be able to interact with the linerenderer for deletion

        MeshCollider mesh = currentLine.AddComponent <MeshCollider>();
        Mesh         m    = new Mesh();

        lr.BakeMesh(m, true);
        mesh.sharedMesh = m;


        return(currentLine.gameObject);
    }
Ejemplo n.º 18
0
    private void UpdateMesh(int id)
    {
        Mesh mesh = new Mesh();

        lineRenderer = PhotonView.Find(id).gameObject.GetComponent <LineRenderer>();

        lineRenderer.BakeMesh(mesh, Camera.main, true);

        meshCollider            = PhotonView.Find(id).gameObject.GetComponent <MeshCollider>();
        meshCollider.sharedMesh = mesh;
    }
Ejemplo n.º 19
0
    // Start is called before the first frame update
    private void Start()
    {
        // fill corners array
        corners = new Vector3[transform.childCount];
        for (int i = 0; i < corners.Length; i++)
        {
            GameObject obj = transform.GetChild(i).gameObject;
            corners[i] = obj.transform.position;
            obj.GetComponent <MeshRenderer>().enabled = false;
        }

        //Line Renderer settings
        m_lineRenderer.positionCount = corners.Length;
        m_lineRenderer.SetPositions(corners);

        // Line Renderer mesh
        Mesh mesh = new Mesh();

        m_lineRenderer.BakeMesh(mesh, true);

        //array of track segments
        segments = new TrackSegment[mesh.triangles.Length / 3];
        int segmentCounter = 0;

        for (int i = 0; i < mesh.triangles.Length; i += 3)
        {
            segments[segmentCounter]           = new TrackSegment();
            segments[segmentCounter].Points    = new Vector3[3];
            segments[segmentCounter].Points[0] = mesh.vertices[mesh.triangles[i]];
            segments[segmentCounter].Points[1] = mesh.vertices[mesh.triangles[i + 1]];
            segments[segmentCounter].Points[2] = mesh.vertices[mesh.triangles[i + 2]];

            segmentCounter++;
        }

        CreateNewCheckpoint();

        //segments debug
        if (!m_debug)
        {
            return;
        }

        foreach (var segment in segments)
        {
            foreach (var point in segment.Points)
            {
                GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                sphere.transform.position   = point;
                sphere.transform.localScale = Vector3.one * 0.1f;
            }
        }
    }
Ejemplo n.º 20
0
        public void GenerateCurves()
        {
            List <float> cos = new List <float>();
            List <float> sin = new List <float>();

            for (float i = 0; i < 2 * Mathf.PI; i += 0.1f)
            {
                cos.Add(Mathf.Cos(i) * 10);
                sin.Add(Mathf.Sin(i) * 10);
            }

            List <Vector3> curvesX = new List <Vector3>();
            List <Vector3> curvesY = new List <Vector3>();
            List <Vector3> curvesZ = new List <Vector3>();

            for (int j = 0; j < cos.Count; j++)
            {
                curvesX.Add(new Vector3(0, sin[j], cos[j]));
                curvesY.Add(new Vector3(sin[j], 0, cos[j]));
                curvesZ.Add(new Vector3(sin[j], cos[j], 0));
            }

            LineRenderer lineX = xCurve.GetComponent <LineRenderer>();
            LineRenderer lineY = yCurve.GetComponent <LineRenderer>();
            LineRenderer lineZ = zCurve.GetComponent <LineRenderer>();

            lineX.SetPositions(curvesX.ToArray());
            lineX.positionCount = curvesX.Count;

            lineY.SetPositions(curvesY.ToArray());
            lineY.positionCount = curvesY.Count;

            lineZ.SetPositions(curvesZ.ToArray());
            lineZ.positionCount = curvesZ.Count;

            Mesh meshX = new Mesh();

            lineX.BakeMesh(meshX);

            Mesh meshY = new Mesh();

            lineY.BakeMesh(meshY);

            Mesh meshZ = new Mesh();

            lineZ.BakeMesh(meshZ);

            lineX.GetComponent <MeshCollider>().sharedMesh = meshX;
            lineY.GetComponent <MeshCollider>().sharedMesh = meshY;
            lineZ.GetComponent <MeshCollider>().sharedMesh = meshZ;
        }
Ejemplo n.º 21
0
    public void DrawMesh()
    {
        Init();
        Vector3[] vertices = new Vector3[points.Count];

        vertices = points.ToArray();


        Mesh mesh = new Mesh();

        line.BakeMesh(mesh);
        mesh.RecalculateNormals();
        filter.sharedMesh = mesh;
    }
Ejemplo n.º 22
0
    void Start()
    {
        //GetComponent<LineRenderer>().material.color = new Color(0f, 0f, 0f, 0f);
        linerenderer = GetComponent <LineRenderer>();

        linerenderer.enabled = false;

        meshcollider = GetComponent <MeshCollider>();

        Mesh mesh = new Mesh();

        linerenderer.BakeMesh(mesh, true);
        meshcollider.sharedMesh = mesh;
    }
Ejemplo n.º 23
0
    public void CreateLineAgent(Agent agent, Transform parentTransform, Material mat, int speciesId, bool elevate, float lineWidth, string tagName, float zPosition)
    {
        GameObject newObject = new GameObject(agent.AgentName);

        newObject.GetComponent <Transform>().SetParent(parentTransform);
        var          meshFilter   = newObject.AddComponent <MeshFilter>();
        LineRenderer line         = newObject.AddComponent <LineRenderer>();
        Mesh         mesh         = new Mesh();
        var          meshRenderer = newObject.AddComponent <MeshRenderer>();

        meshRenderer.sharedMaterial = lineMaterial;
        meshRenderer.sharedMaterial = mat;
        //LineRenderer line = (LineRenderer)newObject.GetComponent(typeof(LineRenderer));

        line.useWorldSpace = true;

        line.positionCount = agent.AgentCoordinate.GetVector3Coordinates().Length;
        line.SetPositions(agent.AgentCoordinate.GetVector3Coordinates());
        //line.positionCount = agent.agentCoordinate.getVector2Coordinates().Length / 2;
        line.material   = lineMaterial;
        line.startWidth = lineWidth;
        line.endWidth   = lineWidth;
        line.BakeMesh(mesh);
        meshFilter.sharedMesh = mesh;

        RectTransform rt = newObject.AddComponent <RectTransform>(); //(newObject.AddComponent<RectTransform>()).GetComponent<RectTransform>();

        rt.anchorMin = SceneManager.AnchorMin;
        rt.anchorMax = SceneManager.AnchorMax;
        rt.pivot     = SceneManager.Pivot;

        rt.anchoredPosition = new Vector3(0, 0, 0);
        Vector3 p = rt.localPosition;

        rt.localPosition = new Vector3(p.x, p.y, zPosition);

        SetAgentTag(newObject, tagName);

        SetObjectSpecies(newObject, agent.Species);


        Destroy(line);
    }
Ejemplo n.º 24
0
    // Update is called once per frame
    void Update()
    {
        UpdatePosition();

        foreach (MeshRenderer mr in gameObject.transform.GetComponentsInChildren <MeshRenderer>())
        {
            mr.enabled = info.show;
        }
        line.enabled = info.show;
        // create line mesh collider
        Mesh mesh = new Mesh();

        line.BakeMesh(mesh, true);
        line.gameObject.GetComponent <MeshCollider>().sharedMesh = mesh;

        // Dead
        CheckDeath();
        // Kill
        CheckKill();
    }
Ejemplo n.º 25
0
    private void Update()
    {
        if (!_drawCam.pixelRect.Contains(Input.mousePosition))
        {
            return;
        }
        if (Input.GetMouseButtonDown(0))
        {
            Reset();
        }

        if (Input.GetMouseButton(0))
        {
            var mousePos = _drawCam.ScreenToWorldPoint(Input.mousePosition);
            mousePos.z = 0;
            if (!points.Contains(mousePos))
            {
                points.Add(mousePos);
                lineRenderer.positionCount     = points.Count;
                drawLineRenderer.positionCount = points.Count;
                var pos = mousePos - _drawCam.transform.position;
                pos.z = 0;
                lineRenderer.SetPosition(lineRenderer.positionCount - 1, pos);
                drawLineRenderer.SetPosition(drawLineRenderer.positionCount - 1, mousePos);
            }
        }

        if (Input.GetMouseButtonUp(0))
        {
            _meshFilter.transform.parent.rotation = Quaternion.identity;
            Mesh _mesh = new Mesh();
            lineRenderer.BakeMesh(_mesh);
            _meshFilter.sharedMesh = _mesh;
            Vector3[] positions = new Vector3[lineRenderer.positionCount];
            lineRenderer.GetPositions(positions);
            _edgeCollider.points = positions.ToVector2Array();
            _movementController.SetHingePositions(GetCorrectPos(points[0]), GetCorrectPos(points[points.Count - 1]));
        }
    }
Ejemplo n.º 26
0
    /// <summary>
    /// Called when hovering over middle buttons
    /// </summary>
    /// <param name="col"></param>
    public void SetNode(Collider col)
    {
        // change color
        col.GetComponent <SpriteRenderer>().color = activeColor;
        // disable collider to avoid selecting node twice
        col.enabled = false;
        // set the position of line renderer vertice
        lr.SetPosition(nextPosition, col.transform.position);
        // increment position count
        lr.positionCount++;
        // set next position as previous position - default is Vector3.zero - a white line is seen for a fraction of a second otherwise
        lr.SetPosition(nextPosition + 1, lr.GetPosition(nextPosition));

        // update mesh collider for line renderer with new line
        Mesh mesh = new Mesh();

        lr.BakeMesh(mesh, true);
        meshCollider.sharedMesh = mesh;

        // increment next position
        nextPosition++;
    }
    void Update()
    {
        _LineRenderer.useWorldSpace = false;
        _LineRenderer.loop          = GetSpline().SplineLoop();
        _LineRenderer.startWidth    = _Width;
        _LineRenderer.positionCount = 0;
        _LineRenderer.colorGradient = _VertexColor;



        if (_Spline.GetPointCount() > 0)
        {
            var     P           = 0f;
            var     start       = GetSpline().GetNonUniformPoint(0f);
            Vector3 _FirstPoint = start;
            _FirstPoint = transform.InverseTransformPoint(_FirstPoint);
            _LineRenderer.positionCount++;
            _LineRenderer.SetPosition(_LineRenderer.positionCount - 1, _FirstPoint);
            var step = 1f / resolution;
            do
            {
                _LineRenderer.positionCount++;

                P += step;
                var here = GetSpline().GetNonUniformPoint(P);
                here = transform.InverseTransformPoint(here);
                _LineRenderer.SetPosition(_LineRenderer.positionCount - 1, here);

                start = here;
            } while (P + step <= 1);
        }

        if (_BakedMesh == null)
        {
            _BakedMesh = new Mesh();
        }
        _LineRenderer.BakeMesh(_BakedMesh, false);
    }
Ejemplo n.º 28
0
        private void CreateInkCollider(LineRenderer lineRenderer)
        {
            var colliderInstance = VRCInstantiate(colliderPrefab.gameObject);

            colliderInstance.name = "InkCollider";
            colliderInstance.transform.SetParent(lineInstance.transform);
            colliderInstance.transform.position   = Vector3.zero;
            colliderInstance.transform.rotation   = Quaternion.identity;
            colliderInstance.transform.localScale = Vector3.one;

            var meshCollider = colliderInstance.GetComponent <MeshCollider>();

            var mesh            = new Mesh();
            var widthMultiplier = lineRenderer.widthMultiplier;

            lineRenderer.widthMultiplier = inkWidth;
            lineRenderer.BakeMesh(mesh);
            lineRenderer.widthMultiplier = widthMultiplier;

            meshCollider.sharedMesh = mesh;

            colliderInstance.SetActive(true);
        }
Ejemplo n.º 29
0
        //Draws new road and turns it in to a mesh
        protected virtual void DrawNewRoad(string name, float size, int sortOrder)
        {
            GameObject newLine = new GameObject(name);

            //newLine.AddComponent<BitmapReader>();

            //Line renderer
            newLine.transform.position = this.transform.position;
            LineRenderer nlr = newLine.AddComponent <LineRenderer>();
            MeshFilter   mf  = newLine.AddComponent <MeshFilter>();
            MeshRenderer mr  = newLine.AddComponent <MeshRenderer>();

            nlr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
            nlr.material          = Mat;
            Mat.color             = roadColor;
            nlr.positionCount     = 2;
            nlr.SetPosition(0, this.transform.position);
            nlr.SetPosition(1, debugPos);
            nlr.startWidth = size;
            nlr.endWidth   = size;
            Mesh m = new Mesh();

            m.Clear();
            nlr.BakeMesh(m, settings.renderCamera, true);
            mf.mesh = m;
            Bounds  carBounds      = mf.mesh.bounds;
            Vector3 whereYouWantMe = this.transform.position;
            Vector3 offset         = newLine.transform.position - newLine.transform.TransformPoint(this.transform.position);

            newLine.transform.position = whereYouWantMe + offset;
            mr.material              = Mat;
            nlr.sortingOrder         = sortOrder;
            debugPos                 = this.transform.position;
            newLine.transform.parent = settings.transform;
            newLine.tag              = "Height";
            Destroy(nlr);
        }
Ejemplo n.º 30
0
    private void Update()
    {
        if (refreshTime <= 0)
        {
            refreshTime = 0.5f;             //half second
        }
        else
        {
            refreshTime -= Time.deltaTime;
            return;
        }

        float resolution = 0.1f;
        int   segments   = Mathf.FloorToInt(1f / resolution);

        //sort points
        controlPointsList.Sort((m1, m2) => m1.pointId.CompareTo(m2.pointId));

        Vector3 trackUp = Vector3.up;

        if (controlPointsList.Count > 0)
        {
            trackUp = controlPointsList[0].transform.up;
        }

        //generate points from the markers
        positions = new Vector3[controlPointsList.Count * segments];

        int elem = 0;

        if (controlPointsList.Count >= 4)
        {
            for (int i = 0; i < controlPointsList.Count; i++)
            {
                //catmull algorithm: 4 points
                Vector3 p0 = controlPointsList[ClampListPos(i - 1)].transform.position;
                Vector3 p1 = controlPointsList[i].transform.position;
                Vector3 p2 = controlPointsList[ClampListPos(i + 1)].transform.position;
                Vector3 p3 = controlPointsList[ClampListPos(i + 2)].transform.position;

                int startElem = elem;
                for (int j = 1; j <= segments; j++)
                {
                    //Which t position are we at?
                    float t = j * resolution;

                    //Find the coordinate between the end points with a Catmull-Rom spline
                    Vector3 newPos = GetCatmullRomPosition(t, p0, p1, p2, p3);

                    //align to the first
                    if (i > 0)
                    {
                        newPos = Vector3.ProjectOnPlane(newPos - positions[0], trackUp) + positions[0];
                    }
                    positions[elem] = newPos;

                    elem++;
                }

                //muovi la barra sul punto della pista
                Transform child = controlPointsList[i].transform.GetChild(0);
                child.position = positions[startElem];
            }
        }


        //orienta i target intermedi
        for (int i = 0; i < controlPointsList.Count; i++)
        {
            int       startElem = i * segments;
            Transform child;
            if (positions.Length > 1)
            {
                //ottieni il punto precedente
                int idx1 = startElem - 1;
                if (idx1 < 0)
                {
                    idx1 = positions.Length - 1;
                }

                //ottieni il punto successivo
                int idx2 = (startElem + 1) % positions.Length;

                //orienta usando il punto precedente e il successivo
                Quaternion rot = Quaternion.LookRotation((positions[idx2] - positions[idx1]).normalized, trackUp);

                child          = controlPointsList[i].transform.GetChild(0);
                child.rotation = rot;
            }
        }


        if (positions.Length > 2)
        {
            //sposta la bandiera d'arrivo nel punto corretto e la orienta
            goal.position = positions[0];
            goal.rotation = Quaternion.LookRotation((positions[positions.Length - 1] - positions[1]).normalized, trackUp);
        }

        //align the spline direction to the first marker
        lr.positionCount = positions.Length;
        lr.SetPositions(positions);
        if (controlPointsList.Count > 0)
        {
            transform.forward = -trackUp;

            colliderChild.transform.rotation = Quaternion.identity;
            //plane.position = controlPointsList[0].transform.position - controlPointsList[0].transform.up * 0.1f;
            //plane.rotation = controlPointsList[0].transform.rotation;
        }

        //bake a collision mesh
        lr.BakeMesh(mesh, true);
        meshCollider.sharedMesh = mesh;
    }