Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C#, Unity: Ongelma 3D-logiikan kanssa

TVdata [10.02.2015 16:45:34]

#

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class Positioner {
    public static Vector3 FixedPosition (GameObject GroundObject, RaycastHit hit){
        Vector3 oldPosition = GroundObject.transform.position;
        GroundObject.transform.position = hit.point;
        Vector3[] ObjectVertices = GroundObject.GetComponent<MeshFilter>().mesh.vertices;
        List<Vector3> ProjectedVertices = new List<Vector3>();
        List<float> VerticeDistance = new List<float>();
        foreach(Vector3 vertice in ObjectVertices){        // Projects every vertex point to a line from linePoint
            Vector3 linePoint = Vector3.MoveTowards(hit.point, hit.normal, Vector3.Distance(GroundObject.collider.bounds.max, hit.point));
            Vector3 ProjectedVertice = Math3d.ProjectPointOnLine(linePoint, (hit.point - linePoint).normalized, GroundObject.transform.TransformPoint(vertice));
            ProjectedVertices.Add (ProjectedVertice);
            VerticeDistance.Add (Vector3.Distance(ProjectedVertice, linePoint));
        }
        Vector3 FarthestPoint = ProjectedVertices[VerticeDistance.IndexOf(VerticeDistance.Max())];
        float IntersectionDepht = Vector3.Distance(hit.point, FarthestPoint);
        GroundObject.transform.position = oldPosition;
        Debug.DrawRay(FarthestPoint, Vector3.up, Color.green, 2, false);
        Vector3 finalPosition = hit.point + (hit.normal.normalized * IntersectionDepht);
        return finalPosition;
    }
}

Debug infoa riviltä 24:
297.7, 17.5, 308.0 = 297.7, 17.3, 308.0 + (0.0, 1.0, 0.0 * 0,2324142 )

Tarkoitus on korjata objektin sijaintia lähtien käyttäen raycast hittiä, se muuntaa 3d mallin pisteet globaaliksi ja laskee mikä on normaalin suhteen kaukaisin. Koska objektin keskipiste on oletuksena osumassa siirretään sitä normaalia kohti kaukaisimman pisteet ja keskipisteen etäisyyden verran. Tällä hetkellä kuitenkin etäisyys on aina liian suuri.

TVdata [12.02.2015 15:52:31]

#

Apuja? Onko tässä logiikassa jotain pielessä?

TVdata [13.02.2015 21:31:02]

#

:(

TVdata [15.02.2015 12:21:49]

#

Sain ratkaisun muualta. https://dl.dropboxusercontent.com/u/92559435/UnityBuild2/UnityBuild2.html
Parent / child rakenteen käyttäminen.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta