【发布时间】:2017-06-18 00:30:35
【问题描述】:
我有一个父游戏对象ZombieArmy,并附有脚本Zombie;每次将新的僵尸实例化为孩子时,它的 Transform 都会发生变化。如何防止zombieArmy变换发生变化并将其变换固定在Vector3(0,0,0),同时让僵尸从每个reSpawn()都有自己独特的变换?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Zombie : MonoBehaviour {
public GameObject zombiePrefab;
public Transform zombieArmy;
public Transform zombieSpawnPoint;
private Transform[] spawnPositions;
public bool reSpawn = false;
private bool lastToggle = false;
private GameObject spawn;
// Use this for initialization
void Start () {
spawnPositions = zombieSpawnPoint.GetComponentsInChildren<Transform>();
}
private void NewSpawn() //spawn location of newZombie
{
if (reSpawn)
{
int i = Random.Range(1, spawnPositions.Length);
transform.position = spawnPositions[i].transform.position;
spawn = Instantiate(zombiePrefab, this.transform.position, this.transform.rotation, zombieArmy);
// zombieArmy.transform.position = new Vector3(0, 0, 0);
}
}
void Update () { //T-toggle
if (reSpawn != lastToggle)
{
NewSpawn();
reSpawn = false;
}
else
lastToggle = reSpawn;
}
}
【问题讨论】:
-
来自您的代码
Transform zombieArmy仅用于Instantiate()并且保证不会更改Transform zombieArmy。这意味着Transform zombieArmy已在此代码之外的其他地方更改,您应该查找或提供其他相关类来解决此问题 -
我还阅读了您之前的帖子,看来您在基本设置方面遇到了问题。我建议您去查看 Unity 的教程以了解 Unity 中的一些最佳实践。如果您查找更多有关设计类及其角色的信息,这也会有所帮助。诸如“僵尸需要知道刷怪箱的位置吗?”之类的问题。是在编写代码之前应该考虑的问题。 Google SOLID 原则和其他著名的 OOP 设计概念,因为它们将帮助您开发出色的游戏。
-
这段代码看起来不错。其他地方一定有问题。找出其他地方可以访问僵尸军队的变换。
-
谢谢大家!从您的 cmets 意识到这不是编码错误后,zombieArmy 仅在此脚本中被调用。我将zombieArmy GameObject 放入另一个GameObject 并将该GameObject 设为Parent,它成功了! :D
标签: c# unity3d transform instantiation