Skip to content

Instantly share code, notes, and snippets.

@tsubaki
Last active June 2, 2020 02:50
Show Gist options
  • Save tsubaki/2d6de15ee29bd039958c to your computer and use it in GitHub Desktop.
Save tsubaki/2d6de15ee29bd039958c to your computer and use it in GitHub Desktop.
画面にアスペクト比固定でフィットするようにスプライトの大きさを変更する。http://tsubakit1.hateblo.jp/entry/20140710/1405004237 の応用
using UnityEngine;
[RequireComponent(typeof(SpriteRenderer))]
public class Scaler : MonoBehaviour {
// スプライトが大きさを合わせたいカメラ
[SerializeField] private Camera mainCamera;
// コンポーネントのキャッシュ
[SerializeField, HideInInspector] private SpriteRenderer spriteRender;
[SerializeField, HideInInspector] private Transform _transform;
// コンポーネント登録時に事前計算(or コンテキストメニューのReset)
void Reset()
{
// コンポーネントのキャッシュ
spriteRender = GetComponent<SpriteRenderer>();
_transform = GetComponent<Transform>();
// MainCameraを取得し、カメラの中央まで移動
mainCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();
_transform.position = mainCamera.transform.position + mainCamera.transform.forward;
}
void Update ()
{
UpdateSpritesize();
}
void UpdateSpritesize()
{
// スプライトのアスペクト比を取得。
var sprite = spriteRender.sprite;
var spriteaspect = sprite.rect.width / sprite.rect.height;
// アス比に合わせてスプライトのサイズを変更
if( mainCamera.aspect > spriteaspect){
var spritesize = sprite.rect.height / sprite.pixelsPerUnit * 0.5f;
var screenrate = Camera.main.orthographicSize / spritesize;
_transform.localScale = Vector3.one * screenrate;
}else{
var spritesize = sprite.rect.width / sprite.pixelsPerUnit * 0.5f;
var screenrate = Camera.main.orthographicSize * Camera.main.aspect / spritesize;
_transform.localScale = Vector3.one * screenrate;
}
}
}
@tsubaki
Copy link
Author

tsubaki commented Jul 10, 2015

img

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment