0

Unity 3D で初めてタワー ディフェンス ゲームのようなゲームを作成しています。タワーの Fbx モデルをインポートし、プレハブにアタッチしました。今度はタワーのノズルが回転し、敵が通り過ぎるときに敵に追従するようにします。インポートした fbx モデルには、2 つのポリ メッシュがあり、1 つは固定されたタワーのベース用で、もう 1 つは回転するタワーの上部用です。ここで、これら 2 つのメッシュを使用して 2 つの異なるゲーム オブジェクトを作成しようとしましたが、それらを同じポイントに配置するとオーバーラップします。そのため、ノズルがベースの上に正しく収まるように、手動で位置合わせを行う必要があります。タワー全体が1つのgameObjectのままで、上部を回転できるようにする方法が他にあるのではないかと思っていました。

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

ゲームオブジェクトの階層を作成できます。タワーを表す 1 つの親 GameObject と 2 つの子があり、そのうちの 1 つを回転させます。子の座標は親の座標に関連することに注意してください。そのため、子に対して行った「厄介な」手動キャリブレーションはすべて含まれます。

または、より複雑な方法として、アニメーションを持つメッシュを 1 つだけ作成し、それを 1 つのゲームオブジェクトに適用することもできます。

于 2012-09-03T19:00:26.780 に答える