예제 #1
0
        public void MoveVertex(int index, Vector3 position, Quaternion startRotation, Quaternion rotation)
        {
            position = RotateAround(startRotation, rotation, position, center);
            GameObject       vertexInstance   = vertexInstances[index];
            VertexController vertexController = vertexInstance.GetComponent <VertexController>();

            vertexController.UpdateLocalPositionFromWorldPosition(position);
        }
예제 #2
0
        public void MoveVertices(int numberOfSides, Vector3 controllerPosition, Vector3 controllerUp)
        {
            Quaternion startRotation = Quaternion.identity;
            Quaternion rotation      = Quaternion.LookRotation(controllerPosition - center, controllerUp);

            float radius = Vector3.Distance(center, controllerPosition); // distance between center and controller

            float _2pi           = Mathf.PI * 2f;
            int   numberVertices = numberOfSides;
            int   count          = 0;
            float radianOffset   = (90.0f * Mathf.Deg2Rad); /* NOTE: I don't understand why this 90 degree offset is necessary, but it is. */

            while (count < numberVertices)
            {
                float   rad      = ((float)count / numberVertices * _2pi) + radianOffset;
                Vector3 position = new Vector3(Mathf.Cos(rad) * radius, 0f, Mathf.Sin(rad) * radius) + center;
                position = RotateAround(startRotation, rotation, position, center);
                GameObject       vertexInstance   = vertexInstances[count];
                VertexController vertexController = vertexInstance.GetComponent <VertexController>();
                vertexController.UpdateLocalPositionFromWorldPosition(position);
                count++;
            }
        }