Randomize the speed of a projectile.
using System; using System.Collections; using System.Collections.Generic; using UnityEngine;
public class ShipPlayerController : MonoBehaviour {
public Projectile Bullet;
public Camera CameraObject;
public float FireRate = 0.5f;
public float MoveSpeed = 10.0f;
public float SpeedBoost = 20.0f;
private float FireTimer = 0.0f;
public float TotalAmount = 48.0f;
public float AmountPerSecond = 12.0f;
public float Current = 0f;
public float BaseSpeed = 6.0f;
private float maxSpeed;
private float minSpeed;
private Vector3 movement = Vector3.zero;
void Start()
{
}
void Update()
{
if (Input.GetKeyDown(KeyCode.T))
{
MoveSpeed = MoveSpeed + SpeedBoost;
}
else if (Input.GetKeyUp(KeyCode.T))
{
MoveSpeed = SpeedBoost;
}
else
UpdatePosition();
UpdateFiring();
}
void UpdatePosition()
{
movement.x = Input.GetAxis("Horizontal") * Time.deltaTime * MoveSpeed;
movement.y = Input.GetAxis("Vertical") * Time.deltaTime * MoveSpeed;
gameObject.transform.Translate(movement);
Vector3 screenPosition = CameraObject.WorldToScreenPoint(
gameObject.transform.position);
if (screenPosition.y > Screen.height)
{
screenPosition.y = Screen.height;
gameObject.transform.position =
CameraObject.ScreenToWorldPoint(screenPosition);
}
else if (screenPosition.y < 0)
{
screenPosition.y = 0;
gameObject.transform.position =
CameraObject.ScreenToWorldPoint(screenPosition);
}
if (Input.GetKey(KeyCode.T))
{
if (Current <= 0)
{
MoveSpeed = BaseSpeed;
Current = 0;
}
else
{
MoveSpeed = SpeedBoost + BaseSpeed;
Current -= Time.deltaTime * AmountPerSecond;
}
}
else
{
if (Current >= TotalAmount)
{
Current = TotalAmount;
}
else
{
Current += Time.deltaTime * AmountPerSecond;
}
}
}
void UpdateFiring()
{
FireTimer += Time.deltaTime;
if (Input.GetButton("Fire1"))
{
if (FireTimer > FireRate)
{
FireTimer = 0;
DoWeaponFire();
}
}
}
void DoWeaponFire()
{
Rigidbody clone;
clone = Instantiate(Bullet, transform.position, Bullet.rotation) as Rigidbody;
float speed = System.Random.Range(minSpeed, maxSpeed);
clone.velocity = transform.forward * speed;
clone.transform.parent = transform;
}
private Rigidbody Instantiate(Projectile bullet, Vector3 position, object rotation)
{
throw new NotImplementedException();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Projectile : $$anonymous$$onoBehaviour {
public float $$anonymous$$oveSpeed = 5.0f;
internal object rotation;
Rigidbody Bullet;
// Use this for initialization
void Start () {
//Destroy(gameObject, 2.0f);
Bullet = this.GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
transform.position +=
transform.up * Time.deltaTime * $$anonymous$$oveSpeed;
Bullet = GetComponent<Rigidbody>();
}
}
The second is the script on my bullet, the first is the script on my Ship. I'm trying to get to where everytime I fire" The speed that it comes out is random. I've been messing around with this for a few hours now but can't get my head around the problem any ideas? Also if there is a better way to make it just move different speeds when you fire please let me know.
Answer by Napalm1432 · Feb 05, 2017 at 08:27 PM
Since you're already giving a velocity from your shipplayercontroller, in the function DoWeaponFire you will want to randomize the speed value. To do this you can use Random.Value, which gives a value between 0.0 and 1.0, you could scale this ofcourse for other values.
I have not tested this, so i hope this works for you.
Your answer
Follow this Question
Related Questions
My bullet won't go forward? Please check my script and advise me 2 Answers
How do I instantiate an objects direction and speed seperately? 1 Answer
Bullet Destroy 1 Answer
How to move a bullettrail the direction the player is facing 0 Answers
Unet: Bullets only spawn only spawn on host, visible only on host 0 Answers