C# 旋转实例化对象

C# 旋转实例化对象,c#,unity3d,instantiation,C#,Unity3d,Instantiation,我用实例化对象撞了一堵墙。我需要引擎做的是生成三个预置,然后在特定时间将它们翻转过来。然而,我一直无法让它工作。spawn代码可以工作,但当我尝试添加更多代码来操作预置时,它只会给我带来大量错误。spawn脚本位于void Start()中,而另一个脚本位于void Update()中 生成脚本: cardAOne = Instantiate(CardDisplayer.cardList[Shuffle.playerAdeck[0]], new Vector3 (xPosition, y

我用实例化对象撞了一堵墙。我需要引擎做的是生成三个预置,然后在特定时间将它们翻转过来。然而,我一直无法让它工作。spawn代码可以工作,但当我尝试添加更多代码来操作预置时,它只会给我带来大量错误。spawn脚本位于void Start()中,而另一个脚本位于void Update()中

生成脚本:

    cardAOne = Instantiate(CardDisplayer.cardList[Shuffle.playerAdeck[0]], new Vector3 (xPosition, yPosition, (zPosition + 3)), Quaternion.Euler(xRotation, yRotation, zRotation)) as GameObject;
        cardATwo = Instantiate(CardDisplayer.cardList[Shuffle.playerAdeck[1]], new Vector3 (xPosition, yPosition, (zPosition)), Quaternion.Euler(xRotation, yRotation, zRotation))as GameObject;
    cardAThree = Instantiate(CardDisplayer.cardList[Shuffle.playerAdeck[2]], new Vector3 (xPosition, yPosition, (zPosition - 3)), Quaternion.Euler(xRotation, yRotation, zRotation))as GameObject;

    cardBOne = Instantiate(CardDisplayer.cardList[Shuffle.playerBdeck[0]], new Vector3 ((0 - xPosition), yPosition, (zPosition + 3)), Quaternion.Euler(xRotation, (0 - yRotation), zRotation))as GameObject;
    cardBTwo = Instantiate(CardDisplayer.cardList[Shuffle.playerBdeck[1]], new Vector3 ((0 - xPosition), yPosition, (zPosition)), Quaternion.Euler(xRotation, (0 - yRotation), zRotation))as GameObject;
    cardBThree = Instantiate(CardDisplayer.cardList[Shuffle.playerBdeck[2]], new Vector3 ((0 - xPosition), yPosition, (zPosition - 3)), Quaternion.Euler(xRotation, (0 - yRotation), zRotation))as GameObject;
动作脚本:

if (turnA == true) {
        cardAOne.transform.localRotation = Quaternion.Euler(0,0,180);
        cardATwo.transform.localRotation = Quaternion.Euler(0,0,180);
        cardAThree.transform.localRotation = Quaternion.Euler(0,0,180);
    }

通过阅读注释,您只需要正确引用这些值。有几种方法可以做到这一点,静力学可能是最快和最简单的

将生成脚本中的卡设置为
publicstaticgameobjectcardaone,

然后使用
SpawnScript.cardAOne.transform.position从移动脚本调用它们


您还可以在移动文件的顶部有一个公共脚本,然后您可以从Unity中的inspector中拖放该脚本的实例。

此处最有可能出现错误:

if (turnA == true) {
...
我想您只是在访问它之前没有初始化
turnA
。也许您有一些分支代码,其中不是每个分支都为该变量赋值

关于编码风格:


if(turnA)
相当于
if(turnA==true)
,但更清晰、更传统。

错误消息在哪里?“对象引用未设置为对象的实例”(移动脚本的第一行)有两个单独的脚本,您在移动脚本中为对象赋值了吗?否则,您将尝试访问空的对象。那么,我如何引用这些实例呢?我认为这是一种方法(或者至少这是唯一一种看起来没有错误的方法),它的工作原理是它正确地显示了实例。你能显示更多的源代码吗,因为它非常混乱。。你在第一个回答中说脚本在一个层次结构中,但我们怎么能弄清楚呢?此外,这并不是因为父脚本知道子脚本将实例化它。它们位于同一父脚本中。这不重要。不,它已正确初始化为true。加上错误具体从第一条旋转线开始。卡是单行为对象吗?你能给我们一个堆栈跟踪吗?我不知道如何进行堆栈跟踪,但是是的,它是在MonoBehavior中声明的,而不是在Start()或Void()中。我最初有一个这样的设置,但它导致了太多的错误。当出现这样的错误时,堆栈跟踪会自动发生。堆栈跟踪是控制台中错误消息的一部分,用于告知发生错误的行和方法。要提供堆栈跟踪,您只需复制整个错误消息。由于我更新了unity,因此不再出现错误。显然这是唯一的问题。