【问题标题】:How to Instantiate player bullet on leftside in unity如何统一实例化左侧的玩家子弹
【发布时间】:2016-09-01 10:21:46
【问题描述】:

在我的统一 2D 游戏中,我用玩家方向实例化了子弹,但子弹子弹在玩家右侧实例化,我尝试在玩家左侧实例化子弹。这是我的玩家子弹

public Rigidbody2D playerWeapon;


void Start(){

    InvokeRepeating ("PlayerWeapon",1.0f,1.0f);
}

void PlayerWeapon()
{
        Rigidbody2D bPrefab = Instantiate (playerWeapon, new Vector3 (transform.position.x, transform.position.y, transform.position.z), Quaternion.identity) as Rigidbody2D;
}

【问题讨论】:

  • 左右两边是什么意思?你想将子弹实例化到玩家面对的地方吗?
  • 是的,正是这个...
  • 在我的代码中,子弹实例化完美但在玩家后面我想实例化子弹面对玩家。
  • 播放器参考在哪里?上面的脚本是附在播放器上的吗?
  • 我将子弹实例化脚本附加到播放器对象。

标签: c# unity3d instantiation


【解决方案1】:

使用transform.forward 应该可以做到。您还可以使用偏移量来修改子弹应该从玩家的距离产生的距离。试试下面的代码:

public Rigidbody2D playerWeapon;

void Start()
{
    InvokeRepeating("PlayerWeapon", 1.0f, 1.0f);
}

void PlayerWeapon()
{
    float offset = 5;
    Vector3 plyrPos = transform.position;
    Quaternion plyrRot = transform.rotation;
    Vector3 plyrDir = transform.forward;
    Vector3 spawnPos = plyrPos + plyrDir * offset;
    Rigidbody2D bPrefab = Instantiate(playerWeapon, spawnPos, plyrRot) as Rigidbody2D;
}

编辑

您也可以这样做:

void PlayerWeapon()
{
    float shootSpeed = 10f;
    float offset = 5;
    Rigidbody2D bPrefab = Instantiate(playerWeapon, transform.position + (offset * transform.forward), transform.rotation) as Rigidbody2D;
    bPrefab.velocity = transform.forward * shootSpeed;
}

如果仍然走错方向,请将shootSpeed 值翻转为-10,再试一次并将offset 翻转为-5。这可能会解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多