在没有实例化的情况下在另一个对象旁边生成一个对象

Spawn an object next to another object with no instantiate

我有一个总是在同一个地方的对象,我想在另一个可移动的角色旁边生成它。或者更具体地说,我有两个,因为是一个回合制 3D 游戏,我想在一个角色旁边生成这个对象,当回合结束时,在另一个不同的角色旁边生成相同的对象。在他的回合开始时,该对象将始终出现在移动对象旁边。现在我在对象中有这个脚本:

    Vector3 initPosition //the position of the object that I want to move;
    private int whosTurn = 1;

    private IEnumerator WhoTurn()
    {
        if (whosTurn == 1)
        {
            GameController.MovePlayer(1);
            CameraController.isTurnPlayer1 = true;
            CameraController.isTurnPlayer2 = false;
            initPosition = positionPlayer1.transform.position;

        }
        else if (whosTurn == -1)
        {
            GameController.MovePlayer(2);
            CameraController.isTurnPlayer2 = true;
            CameraController.isTurnPlayer1 = false;
        }
        whosTurn = whosTurn * -1;
        yield return 0;

问题是我不想使用实例化方法,只是每次移动相同的对象,这就是为什么我试图从玩家角色更改 'InitPosition',但它没有工作。我怎样才能做到这一点?

public Transform pObject;//(player object)
public Transform eObject;//(enemy object)

void Awake(){ 在这里你需要为两个对象分配初始位置,这两个对象我的意思是你接下来想要生成它们的两个项目。我不确定你是如何分配这个的,但是因为 我正在使用 public 变量,你可以将这两个对象拖到检查器中的这个脚本中,但如果你使用标签,你将在 :

中获取它们
void Awake(){
}

那么你可以这样做:

 private IEnumerator WhoTurn()
    {
        if (whosTurn == 1)
        {
            GameController.MovePlayer(1);
            CameraController.isTurnPlayer1 = true;
            CameraController.isTurnPlayer2 = false;
           transform.position=pObject.position;
    }
    else if (whosTurn == -1)
    {
        GameController.MovePlayer(2);
        CameraController.isTurnPlayer2 = true;
        CameraController.isTurnPlayer1 = false;
        transform.position=eObject.position;
    }
    whosTurn = whosTurn * -1;
    yield return 0;

所以你需要为两个位置设置一个变量,然后你就可以来回切换了。此脚本将对您要移动的对象起作用。

或者,我知道您不想使用实例化,但您可以在玩家回合开始时实例化一个项目,然后 Destroy(gameObject) 在回合结束时实例化。