Offset for player laser not working

void Fire () {
new Vector3 offset = new Vector3 (0, 1, 0);
GameObject beam = Instantiate(projectile, transform.position+offset, Quaternion.identity) as GameObject;
beam.GetComponent().velocity = new Vector2(0, projectileSpeed);

This is my code for the Fire method in my player controller the offset for the laser does not work so if someone could please help me find out why that would be awesome.

Try removing the “new” before Vector3 offset.

1 Like

Ok thanks Sebastian it works now thanks.

Mine not working either. I don’t have the new before the first Vector3.

Whole Code:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class playerController : MonoBehaviour {
[SerializeField] public float padding = 0.7f;
[SerializeField] public float shipSpeed;
//only to view not to change
[SerializeField] float xMin;
[SerializeField] float xMax;
public GameObject laserPreFab;
[SerializeField] float projectileSpeed = 10f;
[SerializeField] float fireRate;
public float health = 300f;

void OnTriggerEnter2D(Collider2D collision)
{
    Projectile missile = collision.gameObject.GetComponent<Projectile>();
          if (missile)
    {
        health -= missile.GetDamage();
        missile.Hit();
                   if (health <= 0)
        {
            Die();
        }
    }
}

void Die()
{
    Destroy(gameObject);
}

// Use this for initialization
void Start () {

    //automatically calculates min and max x
    float distance = transform.position.z - Camera.main.transform.position.z;
    Vector3 leftMost = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, distance));
    Vector3 rightMost = Camera.main.ViewportToWorldPoint(new Vector3(1, 0, distance));
    xMin = leftMost.x + padding;
    xMax = rightMost.x - padding; 
}

void LaserFire()
{
    Vector3 offset = new Vector3(0, 1, 0);
    GameObject beam = Instantiate(laserPreFab, transform.position, Quaternion.identity) as GameObject;
    beam.GetComponent<Rigidbody2D>().velocity = new Vector3(0, projectileSpeed, 0);
}

// Update is called once per frame
void Update () {

    //Fixes bug where left or right movement was interrupted with only one if statement.
    if (Input.GetKey(KeyCode.LeftArrow))
    {

        //transform.position += new Vector3(shipSpeed, 0, 0);
        transform.position += Vector3.left * shipSpeed * Time.deltaTime;
    }
    else if (Input.GetKey(KeyCode.RightArrow))
    {

        //transform.position += new Vector3(-shipSpeed, 0, 0);
        transform.position += Vector3.right * shipSpeed * Time.deltaTime;
    }

    //redundancy to fix movement bug listed above.
    if (Input.GetKey(KeyCode.RightArrow))
    {
        
        //transform.position += new Vector3(shipSpeed, 0, 0);
        transform.position += Vector3.right * shipSpeed * Time.deltaTime;
    }
    else if (Input.GetKey(KeyCode.LeftArrow))
    {
        
        //transform.position += new Vector3(-shipSpeed, 0, 0);
        transform.position += Vector3.left * shipSpeed * Time.deltaTime;
    }

    //restrict player to game space.
    float newX = Mathf.Clamp(transform.position.x, xMin, xMax);
    transform.position = new Vector3(newX, transform.position.y, transform.position.z);

    //Laser Fire

    if (Input.GetKeyDown(KeyCode.Space))
    {
        InvokeRepeating("LaserFire", 0.00001f, fireRate);
        
    }
    if (Input.GetKeyUp(KeyCode.Space))
    {
        CancelInvoke("LaserFire");
    }
}

}

Privacy & Terms