見えないものを見たいときとか、
画面上に 線 を引きたいときがある。
接地判定の線を可視化
記事を移動した。
http://makegame.warabenture.com/?p=397
古今の線の引き方の考え方の 移り変わり
古いプログラミングなら drawLine( x, y ) とかで線が引けたもんだ。命令を羅列するというコンセプトで 関数に引数を渡して呼び出す というサイクルに なんでんかんでん 組み込まれていた。
Unityだと 物理演算エンジンにお供えするものかどうかというコンセプトで あらゆるものがお供えもので、
ゲームオブジェクトを追加して コンポーネントをアタッチ
というサイクルに なんでんかんでん 組み込まれている。
やってみる
ゲームオブジェクトを追加して、LineRenderer を持たせるとできる。
「[Unity] - LineRenderer -」note
https://note.mu/mtimsno/n/n9ea6526736ac
線が表示されてなかったら、背景の後ろに表示されているだろう。
ソーティング・レイヤーなどを確認。
[Use World Space] のチェックは外してカメラのレンズに描画している感じにする。そうすると カメラのスクロールについてきてくれる。
C#スクリプトで 位置を設定するなら こんな感じ。
/// <summary>
/// 表示区画の枠
/// </summary>
[MenuItem("Tool/RefreshLineFrame")]
static void RefreshLineFrame()
{
// 枠
lineFrame = GameObject.Find("LineFrame");
transform_lineFrame = lineFrame.GetComponent<Transform>();
LineRenderer lineRenderer = lineFrame.GetComponent<LineRenderer>();
float lineWidth = lineRenderer.widthMultiplier;
float viewWidthHalf = config.pixelOfViewWidth / 2;
lineRenderer.SetPositions(new Vector3[] {
new Vector3(-0.8f-lineWidth-viewWidthHalf,0.8f+lineWidth,-9f),
new Vector3(0.8f+lineWidth+viewWidthHalf,0.8f+lineWidth,-9f),
new Vector3(0.8f+lineWidth+viewWidthHalf,-0.8f-lineWidth,-9f),
new Vector3(-0.8f-lineWidth-viewWidthHalf,-0.8f-lineWidth,-9f),
});
}
枠を広げるコードとか こんなんになる。
Z軸を 0 にすると隠れてしまったりするので
GameObject groundedLine_go = GameObject.Find("GroundedLine");
LineRenderer line = groundedLine_go.GetComponent<LineRenderer>();
line.SetPositions(new Vector3[] {
new Vector3(begin.x, begin.y, line.transform.position.z),
new Vector3(end.x, end.y, line.transform.position.z)
});
z軸は別のところからもってきてもいい。
調整
もっと 枠を ぴったりさせよう。
/// <summary>
/// 表示区画の枠
/// </summary>
[MenuItem("Tool/RefreshLineFrame")]
static void RefreshLineFrame()
{
Config config = (Config)GameObject.Find("Config").GetComponent<MonoBehaviour>();
GameObject lineFrame = GameObject.Find("LineFrame");
Transform transform = lineFrame.GetComponent<Transform>();
LineRenderer lineRenderer = lineFrame.GetComponent<LineRenderer>();
float lineWidthHalf = lineRenderer.widthMultiplier / 2;
float viewWidthHalf = config.pixelOfViewWidth / 2;
float viewHeightHalf = config.GetPixelOfSectionHeight() / 2;
lineRenderer.SetPositions(new Vector3[] {
new Vector3(-lineWidthHalf-viewWidthHalf,lineWidthHalf+viewHeightHalf,-9f),
new Vector3(lineWidthHalf+viewWidthHalf,lineWidthHalf+viewHeightHalf,-9f),
new Vector3(lineWidthHalf+viewWidthHalf,-lineWidthHalf-viewHeightHalf,-9f),
new Vector3(-lineWidthHalf-viewWidthHalf,-lineWidthHalf-viewHeightHalf,-9f),
});
}
自分で書いていて 単位が分からなくなった。
ここらへんは工夫しよう。