如何将对象的起始位置定位在预制件的起始位置上,同样也定位在结束位置上?

问题描述 投票:-1回答:1

我的预制件是由3个部分组成的。Match Start, Cube , Match End :

My match prefab

我所做的是,如果你用鼠标点击Match Start或Match End,它将实例化另一个预制克隆。现在,我想做的是,新克隆的预制件将连接从开始或结束(开始和结束都是红色的顶部和底部部分的匹配)与不同的旋转。

例如像:

Example of how it should be

可能是-90在Z上的新匹配或90在Z上或45,但不是像最后的匹配一样的旋转,因为你不会看到它,它将像一个在另一个。

然后同样的逻辑,当点击新的匹配结束位置创建一个新的匹配,等等。

现在我的脚本的问题是,它在其他地方创建一个新的匹配。

The problem

这是我正在使用的脚本。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    public GameObject matchPrefab;

    private Transform[] StartEndPos;

    // Start is called before the first frame update
    void Start()
    {
        var match = Instantiate(matchPrefab);

        StartEndPos = match.GetComponentsInChildren<Transform>();
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0f);

        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(mousePos);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit))
            {
                if (hit.transform.tag == "Match Start" || hit.transform.tag == "Match End")
                {
                    for (int i = 0; i < StartEndPos.Length; i++)
                    {
                        if (StartEndPos[i].name == hit.transform.name)
                        {
                            var ClonedMatch = Instantiate(matchPrefab, StartEndPos[i].transform.position, Quaternion.identity);
                        }
                    }
                }
                else
                {
                    Debug.Log("Nothing there");
                }
            }
        }
    }
}
c# unity3d
1个回答
0
投票

我刚刚测试了你的代码,它似乎工作,因为它应该 - 基本上。逻辑可能不工作,但实例化确实如此。然而,你能发一张Match prefab的变换值的图片吗?有可能是你的Match prefab没有归零。确保你的预制件是Position (x,y,z) = (0f, 0f, 0f)。如果不是这样,你会得到超级奇怪的实例。

© www.soinside.com 2019 - 2024. All rights reserved.