【问题标题】:Rotate game-object from object-pool从对象池中旋转游戏对象
【发布时间】:2018-06-28 15:13:13
【问题描述】:

我想在项目符号对象创建后旋转它(即从池中取出)。

这是我的函数,子弹从对象池中取出并分别定位:

void CreateBullet (GameObject bulletObj, Transform _bulletPos, float xVal = 0f, float yVal = 0f) {

    //get bullet object from pool
    bulletObj = bulletPool.GetInstance (playerShotsGO);
    bulletObj.transform.position = _bulletPos.position;

    Vector2 pos = bulletPos.transform.position;//Position 0,0

    pos.x += xVal;
    pos.y += yVal;

    bulletObj.transform.position = pos;

    bulletObj.transform.SetParent (playerShotsGO.transform, true);
}

这是我的 PlayerBullet 脚本的更新函数,用于计算子弹的位置:

void Update () {
    Vector2 position = transform.position;

    //compute the bullet's new position
    position = new Vector2 (position.x, position.y + speed * Time.deltaTime);

    //update the bullet's position
    transform.position = position;
}

这里我的对象被实例化了:

protected virtual GameObject AllocateInstance (bool parent, GameObject parentObj) {
    GameObject instance = (GameObject)GameObject.Instantiate (prefab);
    if (parent) {
        instance.transform.SetParent(parentObj.transform, true);
    }

    instance.SetActive(false);
    pool.Add(instance);

    return instance;
}

【问题讨论】:

  • 您在场景中的何处实例化您的对象?通常,您会创建游戏对象,或将其设置为活动对象,然后更改变换的旋转
  • 我更新了我的问题。

标签: c# unity3d rotation


【解决方案1】:

根据 Unity3d 教程中的https://unity3d.com/learn/tutorials/topics/scripting/object-pooling,您需要在池中搜索准备好使用的对象。如果没有找到,则生成一个新的。然后使用SetActive(true) 显示它,并通过instance.transform.rotation = <Vector3> 设置旋转。

【讨论】:

  • 谢谢。我去看看!
  • 这对你有帮助吗@drpelz?
  • 嗯...不是真的。但我已经想通了。无论如何,谢谢。:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
相关资源
最近更新 更多