在unity3D中旋转塔式喷嘴网

时间:2012-09-03 17:44:27

标签: unity3d game-development 3d-modelling

我在Unity 3D中制作了第一款类似塔防游戏的游戏。我已经导入塔的Fbx模型并将其附加到预制件上。现在我希望塔的喷嘴在敌人经过时旋转并跟随敌人。 在我导入的fbx模型中,我得到了两个多边形网格,一个用于固定塔架的底座,另一个用于塔架顶部将旋转。现在我尝试使用这两个网格创建两个不同的gameObject但是如果我将它们放在相同的点上它们重叠。所以我必须手动对齐,使喷嘴正确地放在底座上。 我想知道是否有任何其他方式使整个塔保持是一个游戏对象,我可以旋转上半部分。

2 个答案:

答案 0 :(得分:1)

我确实设法解决了我的问题。不确定是否是最好的方式,但它确实有效。

要升级塔并仅转换喷嘴部件,我基本上就这样做了。

public class tryFbx : MonoBehaviour {
    public GameObject[] ModelPrefab;
    GameObject modelInstance;
    Renderer rn = new Renderer();

    // Attaching the model to prefab at runtime by creating a array of prefabs
    public void AttachModelToPrefab(GameObject modelPrefab) {
       modelInstance = GameObject.Instantiate(modelPrefab) as GameObject;
       modelInstance.transform.position = transform.position;
       modelInstance.transform.rotation = transform.rotation;

       // Attach the model instance to the prefab shell
       modelInstance.transform.parent = gameObject.transform;
   }

    void Start () {

    }

    // Update is called once per frame
    void Update () {
            if (GameManager.upgrade){
            AttachModelToPrefab(ModelPrefab[GameManager.towerUpgradeLevel]);
            foreach ( Renderer r in modelInstance.GetComponentsInChildren<Renderer>()){
                    // "polySurface98" is the name of the mesh I want to rotate. The tower and its upgrade have the same name.
                    if (r.name == "polySurface98") 
                    rn = r; 
             }
        // apply any transformation to the partial fbx
        rn.transform.Translate(1,1,1);
       }
    }
}

答案 1 :(得分:0)

您可以创建GameObjects的层次结构;你将有一个父游戏对象代表塔和2个孩子,因为你旋转其中一个。请注意,孩子的坐标将与父母的坐标相关,因此您对儿童的任何“杂乱”手动校准都将被包含。

或者,更复杂的是,您只能创建一个具有动画的网格并将其应用于一个GameObject。