【问题标题】:How to get two gameobjects to face each other using scripting in Unity3D如何使用 Unity3D 中的脚本让两个游戏对象面对面
【发布时间】:2019-05-03 16:50:26
【问题描述】:

我正在创建一个国际象棋游戏,我想让白队棋子(数组中的 0-5)和黑队棋子(数组中的 6-11)面对面强>在棋盘上。我设法让它们产卵,但目前我只设法让它们都面向同一个方向。

我已尝试在检查器中调整 Y 旋转变换,但如果可能,我希望在脚本中以编程方式实现它。

我正在使用此代码来设置所有部分的方向:

private Quaternion orientation = Quaternion.Euler(0, 180, 0);

这段代码将棋子生成到棋盘上:

private void SpawnChessMan (int index, int x, int y)
{

    GameObject go = Instantiate(ChessManPrefabs[index], GetTileCenter (x,y) , orientation) as GameObject;
    go.transform.SetParent(transform);
    ChessMans[x, y] = go.GetComponent<ChessMan>();
    ChessMans[x, y].SetPosition(x, y);
    ActiveChessMan.Add(go);
}

代码符合我的预期,但是如何使用 c# for Unity3D 让它们面对面?

【问题讨论】:

    标签: c# unity3d quaternions gameobject


    【解决方案1】:

    Unity 有很多有用的工具,如果你知道去哪里找的话。

    https://docs.unity3d.com/ScriptReference/Transform.LookAt.html

    【讨论】:

      【解决方案2】:

      您可以使用您的棋盘 x/y 坐标来确定您的棋子的初始旋转。假设您的白色在 x = 1 到 2 列的左侧,黑色在 x = 7 到 8 列的右侧。

      面向右侧是您原来的 (0, 180, 0) 旋转。

      然后你可以改变你的代码如下:

      Quaternion rot = Quaternion.Euler(0, (x < 3? 180: -180), 0);
      GameObject go = Instantiate(ChessManPrefabs[index], GetTileCenter (x,y) , rot) as GameObject;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-18
        • 1970-01-01
        相关资源
        最近更新 更多