Esempio n. 1
0
    public static GameObject CreateCompass(float Radius = 5f, float Thickness = 0.5f, float ArrowSize = 2f, int NCirclePoints = 40)
    {
        GameObject   go = new GameObject("Compass");
        MeshFilter   mf = go.AddComponent <MeshFilter>();
        MeshRenderer mr = go.AddComponent <MeshRenderer>();

        List <Vector3> outerCirclePoints =
            Enumerable.Range(0, NCirclePoints + 1)
            .Select(i => new Vector3(Mathf.Sin(2 * Mathf.PI * i / NCirclePoints), 0f, Mathf.Cos(2 * Mathf.PI * i / NCirclePoints)))
            .Select(v => (.5f * Thickness + Radius) * v)
            .ToList();

        List <Vector3> innerCirclePoints =
            Enumerable.Range(0, NCirclePoints + 1)
            .Select(i => new Vector3(Mathf.Sin(2 * Mathf.PI * i / NCirclePoints), 0f, Mathf.Cos(2 * Mathf.PI * i / NCirclePoints)))
            .Select(v => (-0.5f * Thickness + Radius) * v)
            .ToList();

        MeshGenerator mg = new MeshGenerator();

        for (int i = 0; i < NCirclePoints; i++)
        {
            mg.AddRectangle(outerCirclePoints[i + 1], outerCirclePoints[i], innerCirclePoints[i], innerCirclePoints[i + 1]);
            mg.AddRectangle(outerCirclePoints[i], outerCirclePoints[i + 1], innerCirclePoints[i + 1], innerCirclePoints[i]);
        }

        float[] Sizes = new float[] { 3f / 2, 1f / 3, 1f / 2, 1f / 3, 1f / 2, 1f / 3, 1f / 2, 1f / 3 };

        for (int i = 0; i < Sizes.Length; i++)
        {
            float angle     = 2 * Mathf.PI * i / Sizes.Length;
            float something = Mathf.PI * 2 / 40;

            Vector3 center = Radius * new Vector3(Mathf.Sin(angle), 0f, Mathf.Cos(angle));
            Vector3 tip    = ((Radius + Sizes[i] * ArrowSize) / Radius) * center;

            Vector3 left  = Radius * new Vector3(Mathf.Sin(angle + something), 0f, Mathf.Cos(angle + something));
            Vector3 right = Radius * new Vector3(Mathf.Sin(angle - something), 0f, Mathf.Cos(angle - something));

            mg.AddTriangle(left, tip, right);
            mg.AddTriangle(left, right, tip);
        }



        mf.mesh = mg.GetMesh();

        return(go);
    }
Esempio n. 2
0
    void Awake()
    {
        MeshFilter   mf = gameObject.AddComponent <MeshFilter> ();
        MeshRenderer mr = gameObject.AddComponent <MeshRenderer> ();

        float halfsize = size / 2;

        MeshGenerator mg = new MeshGenerator();

        //mg.AddRectangle (CornerPoints [1].position, CornerPoints [2].position, CornerPoints [3].position, CornerPoints [0].position);
        // TODO calc the actual borders;

        CornerPoints.Add(CornerPoints.First());
        for (int i = 0; i < CornerPoints.Count - 1; i++)
        {
            Vector3 forward = CornerPoints [i + 1].position - CornerPoints [i].position;
            Vector3 normal  = new Vector3(forward.z, 0, -forward.x).normalized *size;
            Vector3 start   = CornerPoints [i].position;

            mg.AddRectangle(start, start + forward, start + forward + normal, start + normal);
        }
        CornerPoints.Remove(CornerPoints.Last());


        mf.mesh     = mg.GetMesh();
        mr.material = material;
    }
Esempio n. 3
0
    public static void MeshGenTest()
    {
        GameObject   go = new GameObject("Test");
        MeshFilter   mf = go.AddComponent <MeshFilter>();
        MeshRenderer mr = go.AddComponent <MeshRenderer>();

        MeshGenerator mg = new MeshGenerator();

        mg.AddRectangle(Vector3.zero, Vector3.right, Vector3.one, Vector3.forward);

        mf.mesh = mg.GetMesh();
    }
Esempio n. 4
0
    // This is bullshit as shape does not register as convex...
    GameObject CreatePlayFieldCollider()
    {
        Func <float, float, Vector3> GetHitPoint = (x, y) => {
            Ray   ray = mainCamera.ScreenPointToRay(new Vector3(x, y, 0f));
            float LenghtToHitOcean = -ray.origin.y / ray.direction.y;
            return(ray.origin + LenghtToHitOcean * ray.direction);
        };

        Vector3[] corners = new Vector3[] {
            GetHitPoint(0f, 0f),
            GetHitPoint(Screen.width, 0f),
            GetHitPoint(Screen.width, Screen.height),
            GetHitPoint(0f, Screen.height)
        };

        MeshGenerator mg = new MeshGenerator();

        mg.AddRectangle(corners.Select(v => v + new Vector3(0f, 0.5f, 0f)).ToArray());

        GameObject newGO = new GameObject("PlayFieldCollider");
        MeshFilter mf    = newGO.AddComponent <MeshFilter> ();

        //MeshRenderer mr = newGO.AddComponent<MeshRenderer> ();

        mf.mesh   = mg.GetMesh();
        newGO.tag = "PlayField";

        MeshCollider mc = newGO.AddComponent <MeshCollider> ();

        mc.sharedMesh  = mf.mesh;
        mc.convex      = true;
        mc.inflateMesh = true;
        mc.isTrigger   = true;

        return(newGO);
    }