コード例 #1
0
    public void Update(Vector3 rayOrigin, Vector3 rayDirection, float rayLength)
    {
        if (m_state == State.Select)
        {
            m_selection.Raycast(rayOrigin, rayDirection, rayLength);
            Vector3[] vertices;
            int[]     triangles;
            Vector2[] uv;
            m_selection.GenerateMeshData(out vertices, out triangles, out uv);
            if (vertices.Length > 0)
            {
                m_mesh.Clear();
                m_mesh.vertices  = vertices;
                m_mesh.uv        = uv;
                m_mesh.triangles = triangles;
                m_mesh.RecalculateBounds();
                //TODO: make a GetTransform function
                m_gameObject.transform.rotation   = m_selection.rotation;
                m_gameObject.transform.position   = m_selection.position;
                m_gameObject.transform.localScale = m_selection.scale;
            }
        }
        else if (m_state == State.AnimatedExtrude)
        {
            float     delta         = Time.time - m_extrudeStart;
            float     extrudeLength = Mathf.Lerp(0, m_extrudeLength, delta / m_extrudeTime);
            Vector3[] vertices;
            int[]     triangles;
            Vector2[] uv;
            switch (m_platformType)
            {
            default:
            case PlatformType.Raised:
                m_meshExtruder.ExtrudeCapped(out vertices, out triangles, out uv, extrudeLength, m_cappedTopUV, m_cappedCrownUV, m_cappedBaseUV);
                break;

            case PlatformType.Floating:
            case PlatformType.Wall:
                m_meshExtruder.ExtrudeSimpleWithBottom(out vertices, out triangles, out uv, extrudeLength, m_movingTopUV, m_movingSideUV, m_movingBottomUV, extrudeLength * 100);
                break;
            }
            m_mesh.Clear();
            m_mesh.vertices  = vertices;
            m_mesh.uv        = uv;
            m_mesh.triangles = triangles;
            m_mesh.RecalculateBounds();
            m_mesh.RecalculateNormals();
            m_meshRenderer.material   = m_extrudeMaterial;
            m_meshCollider.sharedMesh = null;
            m_meshCollider.sharedMesh = m_mesh;
            if (delta >= m_extrudeTime)
            {
                switch (m_platformType)
                {
                case PlatformType.Raised:
                    break;

                case PlatformType.Floating:
                    m_gameObject.AddComponent <FloatingPlatform>();
                    break;
                }
                m_state      = State.Idle;
                m_gameObject = null;
                //TODO: call OnFinished()
            }
        }
    }
コード例 #2
0
ファイル: GeoMaker.cs プロジェクト: ly774508966/hololens
    private void Update()
    {
        if (!PlayspaceManager.Instance.IsScanningComplete())
        {
            return;
        }

        // Get current joypad axis values
#if UNITY_EDITOR
        float hor     = Input.GetAxis("Horizontal");
        float ver     = Input.GetAxis("Vertical");
        bool  buttonA = Input.GetKeyDown(KeyCode.Joystick1Button0);
        bool  buttonB = Input.GetKeyDown(KeyCode.Joystick1Button1);
#else
        m_xboxController.Update();
        float hor     = m_xboxController.GetAxisLeftThumbstickX();
        float ver     = m_xboxController.GetAxisLeftThumbstickY();
        bool  buttonA = m_xboxController.GetButtonDown(ControllerButton.A);
        bool  buttonB = m_xboxController.GetButtonDown(ControllerButton.B);
#endif

        float delta = (Mathf.Abs(ver) > 0.25f ? ver : 0) * Time.deltaTime;

        if (m_state == State.Select)
        {
            m_selection.Raycast(Camera.main.transform.position, Camera.main.transform.forward);
            Vector3[] vertices;
            int[]     triangles;
            Vector2[] uv;
            m_selection.GenerateMeshData(out vertices, out triangles, out uv);
            if (vertices.Length > 0)
            {
                m_mesh.Clear();
                m_mesh.vertices  = vertices;
                m_mesh.uv        = uv;
                m_mesh.triangles = triangles;
                m_mesh.RecalculateBounds();
                //TODO: make a GetTransform function
                m_gameObject.transform.rotation   = m_selection.rotation;
                m_gameObject.transform.position   = m_selection.position;
                m_gameObject.transform.localScale = m_selection.scale;
                if (buttonA)
                {
                    m_state        = State.ExtrudeSimple;
                    m_meshExtruder = new MeshExtruder(m_selection);
                }
                else if (buttonB)
                {
                    m_state        = State.ExtrudeCapped;
                    m_meshExtruder = new MeshExtruder(m_selection);
                }
            }
        }
        else if (m_state == State.ExtrudeSimple)
        {
            m_extrudeLength += delta;
            Vector3[] vertices;
            int[]     triangles;
            Vector2[] uv;
            m_meshExtruder.ExtrudeSimple(out vertices, out triangles, out uv, m_extrudeLength, m_topUV, m_sideUV, m_extrudeLength * 100);// SelectionTile.SIDE_CM);
            m_mesh.Clear();
            m_mesh.vertices  = vertices;
            m_mesh.uv        = uv;
            m_mesh.triangles = triangles;
            m_mesh.RecalculateBounds();
            m_mesh.RecalculateNormals();
            m_meshRenderer.material   = extrudeMaterial;
            m_meshCollider.sharedMesh = null;
            m_meshCollider.sharedMesh = m_mesh;
            if (buttonA)
            {
                m_state = State.Finished;
            }
        }
        else if (m_state == State.ExtrudeCapped)
        {
            m_extrudeLength += delta;
            Vector3[] vertices;
            int[]     triangles;
            Vector2[] uv;
            m_meshExtruder.ExtrudeCapped(out vertices, out triangles, out uv, m_extrudeLength, m_topUV, m_sideUV, m_sideUV);
            m_mesh.Clear();
            m_mesh.vertices  = vertices;
            m_mesh.uv        = uv;
            m_mesh.triangles = triangles;
            m_mesh.RecalculateBounds();
            m_mesh.RecalculateNormals();
            m_meshRenderer.material   = extrudeMaterial;
            m_meshCollider.sharedMesh = null;
            m_meshCollider.sharedMesh = m_mesh;
            if (buttonA)
            {
                m_state = State.Finished;
            }
        }
    }