我有一个小舞台,玩家可以继续前进。在该地区的两侧有产卵者。这些产卵者实例化炸弹,并将它们扔给玩家。
对于我实际使用的方向
transform.lookAt(playerTransform);
所以这是一张粗略的地图
所以产卵者在地图上旋转。他们从一个点移动到下一个点。
我的炸弹对象附着了刚体并且重力被激活。我只需要找出如何让一个产生者向玩家投掷炸弹。
public class BombSpawner : MonoBehaviour
{
[Range(0, 3)]
[SerializeField]
private int nextPointIndex; // set the first targetpoint
private Vector3[] targetPoints = {
new Vector3(-15,0,15),
new Vector3(15,0,15),
new Vector3(15,0,-15),
new Vector3(-15,0,-15)};
private float movementSpeed = 10;
GameObject bombPrefab;
Transform player;
private void Start()
{
bombPrefab = Resources.Load(StringCollection.BOMB) as GameObject;
player = Globals.GetPlayerObject().transform;
}
private void Update()
{
transform.LookAt(player); // set the object rotation
Vector3 nextPoint = targetPoints[nextPointIndex]; // get the target point
transform.position = Vector3.MoveTowards(transform.position, nextPoint, movementSpeed * Time.deltaTime); // move the spawner
if (transform.position == nextPoint) // point reached? set a new point
{
if (nextPointIndex < targetPoints.Length - 1)
nextPointIndex++;
else
nextPointIndex = 0;
}
}
}
所以我可以写一个像这样的方法
void SpawnBomb()
{
GameObject spawnedBomb = Instantiate(bombPrefab);
}
但我如何实现投掷机制呢?首次尝试时,targetPoint为player.position
应该没问题。
答案 0 :(得分:3)
你需要获得从产卵者到目标位置的方向,产生炸弹并使用你刚刚获得的方向为炸弹增加力量。
为了做到这一点,你应该从你的目标位置减去你的产卵者的位置。
Vector3 dir = target.transform.position - transform.position;
既然你有方向可以产生你的炸弹并且AddForce()
就可以了。要添加力,您需要调用生成的炸弹的Rigidbody组件,如下所示:
spawnedBomb.GetComponent<Rigidbody>().AddForce(dir.normalized * force, ForceMode.Impulse);
dir
是指向目标的方向(标准化 - 因此距离无关紧要),force
几乎就是炸弹的速度。
您可以在此处详细了解Rigidbody.AddForce。