카메라에 표시된 이미지를 저해상도로 설정

9202 단어 해상도Unity
렌더링 텍스쳐를 설정하여 디스플레이의 해상도를 낮춥니다.
처리 부하를 줄이고 해상도가 높은 단말기 부하를 제어하는 데 쓰인다.(ipad 및 Android)
카메라에 구성 요소만 설정하면 OK.
http://wordpress.notargs.com/blog/blog/2016/10/03/unity스크립트 하나만으로 화면 해상도 감소 /
※ 해당 항목 사용자 정의
▶ 이런 느낌

LowResolutionCamera.cs
using UnityEngine;
using UnityEngine.Rendering;

/// <summary>
/// カメラが映すものを低解像度に設定できるようにするコンポーネント
/// </summary>
[RequireComponent(typeof(Camera))]
public class LowResolutionCamera : MonoBehaviour {
    /// <summary>
    /// デフォルト解像度
    /// </summary>
    private readonly Vector2 RESOLUTION = new Vector2(750, 1334);

    /// <summary>
    /// 解像度係数
    /// </summary>
    [SerializeField, Range(0.1f, 1)]
    private float _resolutionWeight = 1f;

    private float _currentResolutionWeight = 1f;

    private RenderTexture _renderTexture;
    private Camera _camera;
    private Camera _subCamera;

    private void Start() {
        SetResolution(_resolutionWeight);
    }

    /// <summary>
    /// 解像度を設定
    /// </summary>
    public void SetResolution(float resolutionWeight) {
        _resolutionWeight = resolutionWeight;
        _currentResolutionWeight = resolutionWeight;

        // 指定解像度に合わせたレンダーテクスチャーを作成
        _renderTexture = new RenderTexture(
            width: (int)(RESOLUTION.x * _currentResolutionWeight),
            height: (int)(RESOLUTION.y * _currentResolutionWeight),
            depth: 24
        );
        _renderTexture.useMipMap = false;
        _renderTexture.filterMode = FilterMode.Point;
        // カメラのレンダーテクスチャーを設定
        if (_camera == null) {
            _camera = GetComponent<Camera>();
        }
        _camera.targetTexture = _renderTexture;

        // レンダーテクスチャーを表示するサブカメラを設定
        if (_subCamera == null) {
            GameObject cameraObject = new GameObject("SubCamera");
            _subCamera = cameraObject.AddComponent<Camera>();
            _subCamera.cullingMask = 0;
            _subCamera.transform.parent = transform;
        }
        CommandBuffer commandBuffer = new CommandBuffer();
        commandBuffer.Blit((RenderTargetIdentifier)_renderTexture, BuiltinRenderTextureType.CameraTarget);
        _subCamera.AddCommandBuffer(CameraEvent.AfterEverything, commandBuffer);
    }

    private void Update() {
        if (_currentResolutionWeight == _resolutionWeight) return;
        // _resolutionWeightの値が更新された時だけ解像度変更処理を呼ぶ
        // Inspector上で_resolutionWeightを操作するとき用の処理
        SetResolution(_resolutionWeight);
    }
}
· Inspector에서 조정할 수 있지만, 발표할 때 소용없습니다.ifdef로 둘러싸고 삭제하는 것을 권장합니다
・반에서 정의한 RESOLUTION도 게임 곳곳에서 사용하기 때문에 일반 상수용 반에서 제외하는 것이 좋다
• Auto Orientation(기울기 터미널로 화면 방향 변경) 시에도 RenderTexture 해상도를 변경해야 함

좋은 웹페이지 즐겨찾기