【发布时间】:2020-06-18 15:18:23
【问题描述】:
这链接到我之前关于无法获得对 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。
该类派生自MonoBehaviour,包含UnityEngine。
停止新闻:
已创建测试文件 Test.cs - 仅包含关键位 - 现在如上所示(替换原始示例)。不会做很多事情(在 savedBuffer 中什么都没有),但应该编译?在lineOfFlight.SetPositions(positions); 行上出现完全相同的错误。
我也试过GetComponent<LineRenderer>().SetPositions(positions); - 完全相同:“'LineRenderer' 不包含'SetPositions' 的定义,并且找不到接受'LineRenderer' 类型的第一个参数的可访问扩展方法'SetPositions'(你是缺少 using 指令或程序集引用?)[Assembly-CSharp]csharp(CS1061)"。
【问题讨论】:
-
你能在你定义
lineOfFlight的地方包含代码吗? -
我已经添加了。
-
能否按原样添加相关代码?问题中的代码无论如何都不会编译(没有返回类型,“....”等)。这使我们更难帮助您确定问题所在,因为在使代码可编译时,我们可能会在不知不觉中解决您遇到的问题。
-
这是一个相当大的文件,我不想砍掉它,因为问题可能会改变。这是整个文件的链接 (drive.google.com/file/d/1MFS1-CKA1g6JiRcGiTQi1OpNl-j-bgBq/…)。只有几行是相关的:50-51 - lineOfFlight 的声明,114-117 - 在 Awake() 中添加 LineRenderer,以及 236-246 - 设置它。唯一的编译错误是 245“'LineRenderer' 不包含 'SetPositions' 的定义 ....”。感谢您的帮助。
-
顺便说一句,你可以简单地做
lineOfFlight = new GameObject ("Line").AddComponent<LineRenderer>(); Debug.Log(lineOfFlight);
标签: c# unity3d gameobject