LineRenderを使っている時に、何故か自分が描きたい位置から線がずれてしまいました。
その原因と解決策を記しておきます。
Positionsは初期状態ではローカル座標
原因は、ワールド座標のつもりで設定していたPositionsが実はローカル座標だったことでした。
解決策1 UseWorldSpaceをOnにする
LineRendererにはUseWorldSpaceというオプションがあります。
このオプションがオンの場合、LineRendererはワールド座標を使用し、オフの場合はオブジェクトのローカル座標に基づいて描画されます。

解決策2 オブジェクトの座標を(0, 0, 0)にする
当然といえば当然ですが、LineRendererがアタッチされたオブジェクトの座標を(0, 0, 0)とすれば、自ずとローカル座標とワールド座標が一致し、設定したPositions通りに描画してくれます。
具体例
画像やスクリプトを用いて具体例を示します。
座標(0, 0, 0)から(1, 1, 0)まで赤い線を引きたいです。DrawLineスクリプトをC#で書いて、Lineという空のオブジェクトにLineRendererとDrawLineスクリプトをアタッチします。
using UnityEngine;
public class DrawLine : MonoBehaviour
{
private LineRenderer lineRenderer;
void Start()
{
// LineRendererコンポーネントを取得
lineRenderer = GetComponent<LineRenderer>();
// 頂点の数を設定(2つの点を結ぶので2)
lineRenderer.positionCount = 2;
// 線の開始位置 (0, 0, 0) と終了位置 (1, 1, 0) を設定
lineRenderer.SetPosition(0, new Vector3(0, 0, 0)); // 開始点
lineRenderer.SetPosition(1, new Vector3(1, 1, 0)); // 終了点
}
}
C#分かりやすいように(0, 0, 0)にOriginという赤い原点を用意し、実行してみます。

Positionsの座標は合っているのに全然違う位置に生成されてしまいます。なぜなら親であるLineの座標が(1.8, 1.52, 0)なんてことになっているからです。
UseWorldSpaceにチェックを入れて実行します。

きちんと(0, 0, 0)から(1, 1, 0)まで線を引いてくれました。
UseWorldSpaceのチェックを外し、Lineの座標を(0, 0, 0)に設定してみます。

上手く引けました。
最後に
分かってしまえば簡単なことですが、知らないと何が原因で座標がずれているか分からず、色んな要素を確認して結構手間取ってしまいました。
コメント