En este momento estás viendo Gire la cámara alrededor de un cubo en tiempo real usando la Utilidad de renderizado de vista previa en uitoolkit

 – Unity

Gire la cámara alrededor de un cubo en tiempo real usando la Utilidad de renderizado de vista previa en uitoolkit – Unity

Gire la cámara alrededor de un cubo en tiempo real usando la Utilidad de renderizado de vista previa en uitoolkit

– UnityAssets3Free

buenas , por aqui Camilo y esta vez os traigo
nueva pregunta

Estoy tratando de girar la cámara en la Utilidad de renderizado de vista previa alrededor de un cubo. El siguiente código parece poder hacer esto, pero nunca parece poder actualizar la imagen mientras el usuario arrastra el mouse.

¿Hay alguna forma de actualizar la imagen sobre la marcha? En lugar de retrasarse después de arrastrar el mouse.

Este ejemplo es completamente independiente, por lo que si crea un archivo MyEditor en una carpeta del Editor, debería poder reproducir el problema que tengo.

using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;

namespace Editor

    public class MyEditor : EditorWindow
    

    private const int ImageSize = 256;
    private const float CameraDistance = 10f;

    private static readonly Rect ImageDimension = new(0, 0, ImageSize, ImageSize);
   
    private static readonly Vector3 DefaultCameraPosition = new(0, CameraDistance, 0);

    private static Vector3 RotateAroundPivot(Vector3 point, Vector3 pivot, Vector3 angles)
    
        return Quaternion.Euler(angles.y, -angles.x, 0) * (point -pivot) + pivot;
    
   
    [MenuItem("Custom/My Editor")]
    public static void Popup()
    
        MyEditor editor = GetWindow<MyEditor>();
        editor.titleContent = new GUIContent("My Custom Editor");
    

    private PreviewRenderUtility _previewUtility;

    private Image _image;

    private bool _mouseIsDown;

    private Vector3 _previousMousePosition;

    private Vector3 _totalRotation;
   
    public void OnEnable()
    
        // setup basic Preview Render Utility
        _previewUtility ??= new PreviewRenderUtility();
        _previewUtility.camera.farClipPlane *= 2;
        Transform transform = _previewUtility.camera.transform;
        transform.position = DefaultCameraPosition;
        transform.LookAt(Vector3.zero);
       
        // Add the cube to the scene
        GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube);
        obj.transform.localScale = new Vector3(0.1f,0.1f,0.1f);
        _previewUtility.AddSingleGO(obj);
    

    public void OnDisable()
    
        if (_previewUtility is not null)
        
            _previewUtility.Cleanup();
            _previewUtility = null;
        
    

    private void CreateGUI()
    
        // Create Image
        _image = new Image();
        rootVisualElement.Add(_image);

        // Setup Mouse Handlers for image
        // note image should be focusable for image to receive all event types
        _image.RegisterCallback<PointerDownEvent>(OnPointerDownHandler);
        _image.RegisterCallback<PointerMoveEvent>(OnPointerMoveHandler);
        _image.RegisterCallback<PointerUpEvent>(OnPointerUpHandler);

        // create and assign Render Texture to Image
        _previewUtility.BeginPreview(ImageDimension, GUIStyle.none);
        _previewUtility.camera.Render();
        _image.image = _previewUtility.EndPreview();
    

    private void OnPointerDownHandler(PointerDownEvent evt)
    
        // start dragging
        _mouseIsDown = true;
        _previousMousePosition = evt.position;
    

    private void OnPointerMoveHandler(PointerMoveEvent evt)
    
        // If the mouse is not down do nothing
        if (!_mouseIsDown)
        
            return;
        

        // Calculate delta and add it to the total rotation
        Vector3 delta = evt.position - _previousMousePosition;
        _previousMousePosition = evt.position;
        _totalRotation += delta;

        // pivot camera around (0, 0, 0)
        _previewUtility.camera.transform.position = RotateAroundPivot(DefaultCameraPosition, Vector3.zero, _totalRotation);
        _previewUtility.camera.transform.LookAt(Vector3.zero);
       
        // Render new camera location - seems to lag
        _previewUtility.BeginPreview(ImageDimension, GUIStyle.none);
        _previewUtility.camera.Render();
        _previewUtility.EndAndDrawPreview(ImageDimension);
    

    private void OnPointerUpHandler(PointerUpEvent evt)
    
        _mouseIsDown = false;
    
   

1 respuesta 1

solo llama Repaint() después de renderizar la cámara para obligar a EditorWindow a volver a dibujar su contenido:

            //beginning of OnPointerMoveHandler...


            // Render new camera location - seems to lag
            _previewUtility.BeginPreview(ImageDimension, GUIStyle.none);
            _previewUtility.camera.Render();
            _previewUtility.EndAndDrawPreview(ImageDimension);

            Repaint(); //added here
        }

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

sin mas,espero que te halla servido

Deja una respuesta