Unity LineRenderer - 无法设置位置
Unity LineRenderer - unable to set positions
这链接到我之前关于无法获得对 Unity LineRenderer 的引用的问题。暂时绕过那个,但仍然不明白问题出在哪里。但是现在,在获得 LineRenderer 引用后,无法对其进行任何操作。
正在以编程方式添加 LineRenderer,并在 Awake() 中获得引用,然后根据需要访问它,添加点负载并显示它。但我不能 - 不会编译。密码是
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public class Test : MonoBehaviour
{
LineRenderer
lineOfFlight;
void Awake()
{
GameObject
lineObject = new GameObject("Line");
lineOfFlight = lineObject.AddComponent<LineRenderer>();
}
void Start() { }
void Update()
{
List<Vector3>
savedBuffer = new List<Vector3>(); // added for test
Vector3[]
positions = new Vector3[3000];
int index = 0;
foreach (Vector3 m in savedBuffer)
positions[index++] = new Vector3(index, index, index);
lineOfFlight.SetPositions(positions);
}
}
在Awake()中设置OK。
错误是 lineOfFlight(LineRenderer 类型)没有名为 SetPositions() 的方法 - 根据它的 Unity 手册,我找不到它有任何可用于设置位置的方法。它只有标准的 GameObject 方法。
这是 Unity 手册示例(在 Update() 中):
LineRenderer lineRenderer = GetComponent<LineRenderer>();
var points = new Vector3[lengthOfLineRenderer];
var t = Time.time;
for (int i = 0; i < lengthOfLineRenderer; i++)
{
points[i] = new Vector3(i * 0.5f, Mathf.Sin(i + t), 0.0f);
}
lineRenderer.SetPositions(points);
那么有什么不同呢?
我忽略了这里的要点 - 应该如何访问这些组件?我之前在其他组件上发现过这个问题 - 显然我不明白如何在 Unity 中获取 API。
class源自MonoBehaviour,包含UnityEngine
停止按下:
已创建测试文件 Test.cs - 仅包含关键位 - 现在如上所示(已替换原始示例)。不会做太多事情(在 savedBuffer 中什么都没有),但是应该编译吗?在 lineOfFlight.SetPositions(positions);
.
行出现完全相同的错误
我也试过 GetComponent<LineRenderer>().SetPositions(positions);
- 完全一样:“'LineRenderer' 不包含 'SetPositions' 的定义并且没有可访问的扩展方法 'SetPositions' 接受第一个参数可以找到类型 'LineRenderer'(您是否缺少 using 指令或程序集引用?)[Assembly-CSharp]csharp(CS1061)".
您也许可以解决问题,但添加以下内容:
if(lineOfFlight == null)
{
GameObject lineObject = new GameObject("Line");
lineOfFlight = lineObject.AddComponent<LineRenderer>();
}
就在
下面
if (recording.savedBuffer != null)
{
确保 lineOfFlight 在被 Update() 脚本调用之前正确设置。如果这解决了您的问题,则存在竞争条件,导致在触发 Awake() 之前为对象触发 Update()
你问题中的代码对我来说是开箱即用的,所以它几乎肯定与另一个使用相同 LineRenderer
名称的库或包有冲突。
可能定义您要使用 UnityEngine
命名空间中的 LineRenderer
应该可以解决您的问题。 (除了去掉其他包,你说找不到)
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
UnityEngine.LineRenderer lineOfFlight;// <- Note the UnityEngine.Linerenderer
void Awake()
{
GameObject lineObject = new GameObject("Line");
lineOfFlight = lineObject.AddComponent<UnityEngine.LineRenderer>();// <- notice the UnityEngine.LineRenderer
}
// Update is called once per frame
void Update()
{
List<Vector3> savedBuffer = new List<Vector3>();
if (Input.GetKey(KeyCode.V))
{
if (true)
{
Vector3[] positions = new Vector3[30];
int index = 0;
foreach (Vector3 m in savedBuffer)
positions[index++] = new Vector3(index, index, index);
lineOfFlight.SetPositions(positions);
}
}
}
}
通常像这样的问题应该伴随 IDE 沿着
的方向抛出错误
error CS0104: 'LineRenderer' is an ambiguous reference between 'SomePackage.LindeRenderer' and 'UnityEngine.LineRenderer'
尝试在设置位置之前分配点数
lineRenderer.positionCount = list.Count;
lineRenderer.SetPositions(list);
这链接到我之前关于无法获得对 Unity LineRenderer 的引用的问题。暂时绕过那个,但仍然不明白问题出在哪里。但是现在,在获得 LineRenderer 引用后,无法对其进行任何操作。
正在以编程方式添加 LineRenderer,并在 Awake() 中获得引用,然后根据需要访问它,添加点负载并显示它。但我不能 - 不会编译。密码是
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public class Test : MonoBehaviour
{
LineRenderer
lineOfFlight;
void Awake()
{
GameObject
lineObject = new GameObject("Line");
lineOfFlight = lineObject.AddComponent<LineRenderer>();
}
void Start() { }
void Update()
{
List<Vector3>
savedBuffer = new List<Vector3>(); // added for test
Vector3[]
positions = new Vector3[3000];
int index = 0;
foreach (Vector3 m in savedBuffer)
positions[index++] = new Vector3(index, index, index);
lineOfFlight.SetPositions(positions);
}
}
在Awake()中设置OK。
错误是 lineOfFlight(LineRenderer 类型)没有名为 SetPositions() 的方法 - 根据它的 Unity 手册,我找不到它有任何可用于设置位置的方法。它只有标准的 GameObject 方法。
这是 Unity 手册示例(在 Update() 中):
LineRenderer lineRenderer = GetComponent<LineRenderer>();
var points = new Vector3[lengthOfLineRenderer];
var t = Time.time;
for (int i = 0; i < lengthOfLineRenderer; i++)
{
points[i] = new Vector3(i * 0.5f, Mathf.Sin(i + t), 0.0f);
}
lineRenderer.SetPositions(points);
那么有什么不同呢?
我忽略了这里的要点 - 应该如何访问这些组件?我之前在其他组件上发现过这个问题 - 显然我不明白如何在 Unity 中获取 API。
class源自MonoBehaviour,包含UnityEngine
停止按下:
已创建测试文件 Test.cs - 仅包含关键位 - 现在如上所示(已替换原始示例)。不会做太多事情(在 savedBuffer 中什么都没有),但是应该编译吗?在 lineOfFlight.SetPositions(positions);
.
我也试过 GetComponent<LineRenderer>().SetPositions(positions);
- 完全一样:“'LineRenderer' 不包含 'SetPositions' 的定义并且没有可访问的扩展方法 'SetPositions' 接受第一个参数可以找到类型 'LineRenderer'(您是否缺少 using 指令或程序集引用?)[Assembly-CSharp]csharp(CS1061)".
您也许可以解决问题,但添加以下内容:
if(lineOfFlight == null)
{
GameObject lineObject = new GameObject("Line");
lineOfFlight = lineObject.AddComponent<LineRenderer>();
}
就在
下面if (recording.savedBuffer != null)
{
确保 lineOfFlight 在被 Update() 脚本调用之前正确设置。如果这解决了您的问题,则存在竞争条件,导致在触发 Awake() 之前为对象触发 Update()
你问题中的代码对我来说是开箱即用的,所以它几乎肯定与另一个使用相同 LineRenderer
名称的库或包有冲突。
可能定义您要使用 UnityEngine
命名空间中的 LineRenderer
应该可以解决您的问题。 (除了去掉其他包,你说找不到)
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
UnityEngine.LineRenderer lineOfFlight;// <- Note the UnityEngine.Linerenderer
void Awake()
{
GameObject lineObject = new GameObject("Line");
lineOfFlight = lineObject.AddComponent<UnityEngine.LineRenderer>();// <- notice the UnityEngine.LineRenderer
}
// Update is called once per frame
void Update()
{
List<Vector3> savedBuffer = new List<Vector3>();
if (Input.GetKey(KeyCode.V))
{
if (true)
{
Vector3[] positions = new Vector3[30];
int index = 0;
foreach (Vector3 m in savedBuffer)
positions[index++] = new Vector3(index, index, index);
lineOfFlight.SetPositions(positions);
}
}
}
}
通常像这样的问题应该伴随 IDE 沿着
的方向抛出错误error CS0104: 'LineRenderer' is an ambiguous reference between 'SomePackage.LindeRenderer' and 'UnityEngine.LineRenderer'
尝试在设置位置之前分配点数
lineRenderer.positionCount = list.Count;
lineRenderer.SetPositions(list);