facebook twitter hatena line email

「Unity/UIImage」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(枠を追加)
(枠を追加)
行40: 行40:
  
 
どこか一辺だけの場合は、以下参照すればできるかも。http://aktaat.hatenablog.com/entry/2016/10/30/085534
 
どこか一辺だけの場合は、以下参照すればできるかも。http://aktaat.hatenablog.com/entry/2016/10/30/085534
 +
<pre>
 +
 +
using UnityEngine;
 +
using System.Collections.Generic;
 +
 +
public class WakuImage : MonoBehaviour
 +
{
 +
    private RectTransform rect;
 +
 +
    private Vector2 TopRight;
 +
    private Vector2 TopLeft;
 +
    private Vector2 BottomLeft;
 +
    private Vector2 BottomRight;
 +
 +
    void Start()
 +
    {
 +
        //自分自身がアタッチしたGameObjectのコンポーネントを取得する場合はgameObject
 +
        //自分がアタッチしているかわからないシーン内のゲームオブジェクトを探して
 +
        //キャッシュするにはGameObject.Find("ゲームオブジェクトの名前")
 +
        rect = gameObject.GetComponent<RectTransform>();
 +
 +
        var offsetMax = rect.offsetMax;//アンカーからのオフセット(右上)
 +
        var offsetMin = rect.offsetMin;//アンカーからのオフセット(左下)
 +
 +
        //アンカーがCanvasの四隅を指定している場合
 +
        TopRight = new Vector2(Screen.width + offsetMax.x, Screen.height + offsetMax.y);
 +
        TopLeft = new Vector2(offsetMin.x, Screen.height + offsetMax.y);
 +
        BottomLeft = new Vector2(offsetMin.x, offsetMin.y);
 +
        BottomRight = new Vector2(Screen.width + offsetMax.x, offsetMin.y);
 +
 +
        LineRenderer renderer = this.GetComponent<LineRenderer>();
 +
        renderer.SetWidth(0.01f, 0.01f); // 幅
 +
        renderer.SetVertexCount(4); // x点間
 +
        renderer.SetPosition(0, new Vector3(Screen.width + offsetMax.x, Screen.height + offsetMax.y, 0));
 +
        renderer.SetPosition(1, new Vector3(offsetMin.x, Screen.height + offsetMax.y, 0));
 +
        renderer.SetPosition(2, new Vector3(offsetMin.x, Screen.height + offsetMax.y, 0));
 +
        renderer.SetPosition(3, new Vector3(Screen.width + offsetMax.x, offsetMin.y, 0));
 +
        // renderer.SetPosition(1, new Vector3(-10f, -10f, 0f)); // 0から右上へ
 +
 +
    }
 +
}
 +
</pre>

2020年11月6日 (金) 19:19時点における版

幅修正

GameObject graph = GameObject.Find("/Canvas/Graph");
RectTransform textRect = graph.GetComponent<RectTransform>();
textRect.sizeDelta = new Vector2(1000.0f, 1000.0f);

幅と高さ

float width = gameObject.GetComponent<RectTransform>().sizeDelta.x; // 幅
float height = gameObject.GetComponent<RectTransform>().sizeDelta.y; // 高さ

UiImage複製して配置

  • Canvas/CopySourceImageにコピー元Image設置
  • NewImageが新しくできるImage
GameObject canvas = GameObject.Find("Canvas");
GameObject copySourceImage = GameObject.Find("Canvas/CopySourceImage");
GameObject newImage = new GameObject("NewImage");
newImage.transform.SetParent(canvas.transform, false);
newImage.transform.SetSiblingIndex(copySourceImage.transform.GetSiblingIndex());
RectTransform baseTransform = copySourceImage.transform as RectTransform;
RectTransform rectTransform = newImage.AddComponent<RectTransform>();
rectTransform.anchorMax = baseTransform.anchorMax;
rectTransform.anchorMin = baseTransform.anchorMin;
rectTransform.anchoredPosition = baseTransform.anchoredPosition;
rectTransform.sizeDelta = baseTransform.sizeDelta;
rectTransform.localScale = baseTransform.localScale;
rectTransform.localPosition = baseTransform.localPosition;
rectTransform.localRotation = baseTransform.localRotation;
Image img = newImage.AddComponent<Image>();
img.sprite = copySourceImage.GetComponent<Image>().sprite;

参考:https://teratail.com/questions/42899

枠を追加

以下で外枠を追加できるが、Imageを透明にするとOutlineも消えてしまう・・。

Outline outline =imageObj.AddComponent<Outline>();
outline.effectColor = new Color(1, 0f, 0f, 1f);

どこか一辺だけの場合は、以下参照すればできるかも。http://aktaat.hatenablog.com/entry/2016/10/30/085534


using UnityEngine;
using System.Collections.Generic;

public class WakuImage : MonoBehaviour
{
    private RectTransform rect;

    private Vector2 TopRight;
    private Vector2 TopLeft;
    private Vector2 BottomLeft;
    private Vector2 BottomRight;

    void Start()
    {
        //自分自身がアタッチしたGameObjectのコンポーネントを取得する場合はgameObject
        //自分がアタッチしているかわからないシーン内のゲームオブジェクトを探して
        //キャッシュするにはGameObject.Find("ゲームオブジェクトの名前")
        rect = gameObject.GetComponent<RectTransform>();

        var offsetMax = rect.offsetMax;//アンカーからのオフセット(右上)
        var offsetMin = rect.offsetMin;//アンカーからのオフセット(左下)

        //アンカーがCanvasの四隅を指定している場合
        TopRight = new Vector2(Screen.width + offsetMax.x, Screen.height + offsetMax.y);
        TopLeft = new Vector2(offsetMin.x, Screen.height + offsetMax.y);
        BottomLeft = new Vector2(offsetMin.x, offsetMin.y);
        BottomRight = new Vector2(Screen.width + offsetMax.x, offsetMin.y);

        LineRenderer renderer = this.GetComponent<LineRenderer>();
        renderer.SetWidth(0.01f, 0.01f); // 幅
        renderer.SetVertexCount(4); // x点間
        renderer.SetPosition(0, new Vector3(Screen.width + offsetMax.x, Screen.height + offsetMax.y, 0));
        renderer.SetPosition(1, new Vector3(offsetMin.x, Screen.height + offsetMax.y, 0));
        renderer.SetPosition(2, new Vector3(offsetMin.x, Screen.height + offsetMax.y, 0));
        renderer.SetPosition(3, new Vector3(Screen.width + offsetMax.x, offsetMin.y, 0));
        // renderer.SetPosition(1, new Vector3(-10f, -10f, 0f)); // 0から右上へ

    }
}