【发布时间】:2019-09-30 22:44:16
【问题描述】:
我创建了一个空的游戏对象并附加了一个脚本以使用 linerenderer 创建一条线。然后把它做成预制件。之后,我使用此代码实例化了该预制件
GameObject lines = (GameObject)Instantiate(screenlines,new Vector3 (
spawnerObjPos.transform.localPosition.x, listoflines[testt],
spawnerObjPos.transform.localPosition.z), transform.rotation);
Destroy(lines , 5);
在那之后我销毁了那个 GameObject 。我的问题是在销毁 GameObject 后,该行仍然出现在屏幕上。我的代码有什么问题。以下是附加到游戏对象以创建 linerenderer 的脚本。
public class CreateLine : MonoBehaviour
{
GameObject myLine;
LineRenderer lr;
public void Start()
{
lr = new LineRenderer();
ShapeCreator();
}
public void ShapeCreator()
{
lr = myLine.AddComponent<LineRenderer>();
lr.material = new Material(Shader.Find("Sprites/Default"));
lr.positionCount = 3;
lr.startWidth = .1f;
lr.endWidth = .1f;
lr.SetPosition(0, new Vector3(shapePositionValues.posA,
shapePositionValues.posD, -1));
lr.SetPosition(1, new Vector3(shapePositionValues.posB,
shapePositionValues.posE, -1));
lr.useWorldSpace = false;
Gradient gradient = new Gradient();
gradient.SetKeys(
new GradientColorKey[]
{
new GradientColorKey(Color.Red, 100f)
},
new GradientAlphaKey[] {
new GradientAlphaKey(1f, 0.0f)
}
);
lr.colorGradient = gradient;
}
}
更新 预制件被破坏,但它留下了一个游戏对象。在下图中,lineprefab 是预制件。每次我实例化它时都会产生一个 lineprefab 然后是一个游戏对象。我的理论是,这是附加脚本并制作成预制件的游戏对象?
【问题讨论】:
-
好吧,你的代码甚至不应该工作。 1)
public LineRenderer lr = new LineRenderer();你不能在组件上调用new。 2)GameObject myLine; myLine.AddComponent<LineRenderer>();你的 myLine 变量不能是空值。所以要么你没有向我们展示你的实际代码,要么它不可能按照你说的去做。你也没有破坏myLine。 -
@Draco18s 谢谢先生的指点。我已将我的代码更新为实际代码。请再次检查。我应该破坏预制然后 myLine 变量?据我了解,当您销毁预制件时,附加到它的脚本也会被销毁?
-
现在它甚至不应该编译,因为您没有在使用它的同一范围内声明
myLine。 -
@Draco18s 我已经修复了编码,先生,对此感到抱歉。为什么即使我破坏了它的预制线仍然存在?谢谢
-
GameObject lines... Destroy()...这是在哪里运行的?在开始,更新,其他一些方法?