【问题标题】:Spawn an object next to another object with no instantiate在没有实例化的情况下在另一个对象旁边生成一个对象
【发布时间】:2019-03-18 15:54:12
【问题描述】:

我有一个总是在同一个地方的对象,我想在另一个可移动角色旁边生成它。或者更具体地说,我有两个,因为是基于回合的 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;

问题是我不想使用实例化方法,只是每转都移动同一个对象,这就是为什么我试图从 Player 角色中更改“InitPosition”,但它不起作用。我怎样才能做到这一点?

【问题讨论】:

  • 定义“不起作用”。因为目前有两件事:1)该值不在任何地方使用,2)当whosTurn == -1 时,您永远不会分配给它
  • 我尝试使用“initPosition = positionPlayer1.transform.position”,但它不起作用,对象不符合我的要求。我不知道应该使用什么属性来传递角色在我想要移动的对象上的位置值,并且我不想被强制实例化它。
  • initPosition 是什么?这是您在某处定义的变量或字段,在您显示的代码中,除了一行之外没有使用它。
  • 啊,好吧,“initPosition”是我要移动的对象的起始位置。我在 Start() 函数中有这段代码:“transform.position = initPosition”,因为脚本在我要移动的游戏对象内。我只是放了我用来改变转弯的协同程序的代码,因为我想改变对象位置的代码行必须在那里。
  • Start() 只运行一次。如果您希望在那之后发生某些事情,您需要将执行此操作的代码放在其他地方。

标签: unity3d spawn


【解决方案1】:
public Transform pObject;//(player object)
public Transform eObject;//(enemy object)

无效唤醒(){ 在这里,您需要为两个对象分配初始位置,这两个对象是指您接下来要生成它们的两个项目。我不确定你是如何分配这个的,但是因为 我使用公共变量,你可以在检查器中将两个对象拖到这个脚本中,但如果你使用标签,你会抓住它们:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多