【问题标题】:Positioning Array Content (Sprites)定位数组内容(精灵)
【发布时间】:2019-06-25 11:28:54
【问题描述】:

我有带有数字的图片(我的意思是 Sprites)。 我把它们放在一个空的游戏对象上,我的意思是 [SerializeField] 并通过脚本添加(C# Ofcourse),所以这些对象并不是真正存在的,它们是在游戏开始时生成的。 因此,正如您在代码中看到的,我可以设置行和列数量以及偏移量也可以设置 X 轴和 Y 轴的距离。但我无法重新定位它。似乎生成的第一个被锁定在项目的中间(第一个左上角)所以我尝试移动空游戏对象的小玩意,但即使我使用检查器,精灵仍然在原地.似乎需要在脚本中定位它,但是如何呢?

请给我足够多的例子,女巫可以使用 Unity 吗?

我尝试将它定位在 Unity 中,正如我已经提到的移动 Gameobject 的 Gizmo 以及 Inspector 中它确实似乎只能在脚本上完成(我可能错了,但我尝试了一切) .

public class Controll : MonoBehaviour 
{
    public const int gridRows = 6;
    public const int gridCols = 6;
    public const float offsetX = 0.65f;
    public const float offsetY = 0.97f;

    [SerializeField] private GameObject[] cardBack;

    // Use this for initialization
    void Start ()
    {
        for (int i = 0; i < gridRows; i++)
        {
            for (int j = 0; j < gridCols; j++)
            {
                Instantiate(cardBack[i], new Vector3(offsetY*j, offsetX* i *-1 , -0.1f), Quaternion.identity);
            }
        }
    }

【问题讨论】:

    标签: arrays unity3d positioning gameobject


    【解决方案1】:

    您正在将所有对象实例化到场景根级别。它们与最初负责实例化的 GameObject 没有任何关系。

    如果您希望它们相对于生成的游戏对象定位,请使用

    var position = transform.position + new Vector3(offsetY * j, offsetX * i * -1, -0.1f);
    Instantiate(cardBack[i], position, Quaternion.Identity, transform);

    为了将它们实例化为 GameObject 的子对象,此 Controll 脚本被附加到。

    现在,如果您平移、旋转或缩放该父对象,所有实例化的对象都会随之变换。

    【讨论】:

    • 旧位置上有什么?也许我误解了你的问题
    • 转换似乎做了一些我意识到的事情,但它还没有完成。我只能在我已经处于播放模式并且你知道这意味着什么时才能移动它,一旦我退出播放模式它就会被重置,但是只是移动游戏对象然后点击播放,它仍然不会移动任何东西。
    • 当然不是 .. 您仍在使用 new Vector3(offsetY * j, offsetX * i * -1, -0.1f); 将其定位到固定位置...现在使用 transform.position + new Vector3(offsetY * j, offsetX * i * -1, -0.1f); 再试一次,这样您就可以添加空对象的原点位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多