0

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

4

2 回答 2

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);
       }
    }
}
于 2012-09-04T01:24:42.527 回答
0

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

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

于 2012-09-03T19:00:26.780 回答