を。 Update()関数でコードを実装したと仮定すると、これはレンダリングされたすべてのフレームと呼ばれます。あなたの動きがかなり遅いにもかかわらず、明らかにあなたの描いた線に隙間を残すほど十分です。以下は
あなたのため正常に動作する必要があり、このlinkからいくつかのコードです:
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(LineRenderer))]
public class LineRendererTest : MonoBehaviour
{
List<Vector3> linePoints = new List<Vector3>();
LineRenderer lineRenderer;
public float startWidth = 1.0f;
public float endWidth = 1.0f;
public float threshold = 0.001f;
Camera thisCamera;
int lineCount = 0;
Vector3 lastPos = Vector3.one * float.MaxValue;
void Awake()
{
thisCamera = Camera.main;
lineRenderer = GetComponent<LineRenderer>();
}
void Update()
{
Vector3 mousePos = Input.mousePosition;
mousePos.z = thisCamera.nearClipPlane;
Vector3 mouseWorld = thisCamera.ScreenToWorldPoint(mousePos);
float dist = Vector3.Distance(lastPos, mouseWorld);
if(dist <= threshold)
return;
lastPos = mouseWorld;
if(linePoints == null)
linePoints = new List<Vector3>();
linePoints.Add(mouseWorld);
UpdateLine();
}
void UpdateLine()
{
lineRenderer.SetWidth(startWidth, endWidth);
lineRenderer.SetVertexCount(linePoints.Count);
for(int i = lineCount; i < linePoints.Count; i++)
{
lineRenderer.SetPosition(i, linePoints[i]);
}
lineCount = linePoints.Count;
}
私はLineRendererを知っています。以前はこれを使っていましたが、LineRendererを使ってカーブをテクスチャにパラメータ化してラスタライズすることも実際に考えていました。私がLineRendererのアプローチにしたくない理由は、ある時点で私はメモリが足りなくなるからです。テクスチャにペイントすると、私は常に固定されたキャンバスになります。 – user1767754
@ user1767754バッファを使用して同じメモリを再利用する際に、メモリ不足を避けるために簡単に実装できます。だから私はまだLineRendererに行くだろう。 –
メモリが不要な場合は、同じメモリを再利用できます。しかし、あなたが常に線を引いて維持したいとき、それは難しいことがあります。私が固定キャンバスを持っていれば、私は持っていない問題です。おそらくLinerendererとラインを描画するハイブリッドソリューションに行く必要があり、完了したらそれらをテクスチャにスプラットする必要があります。それでも私はマウスの位置をスキップする理由は混乱しています。 – user1767754