Unity2D在向敌人

时间:2017-04-03 19:45:30

标签: c# unity3d

https://gyazo.com/0a29918f513316fc4143a5ff76095bd3

这就是它的视觉效果。

这是我的射击武器代码:

public class Weapon : MonoBehaviour {

public float fireRate = 0;
public float maxDamage = 10;
public LayerMask whatToHit ;

public Transform BulletTrailPrefab;
public Transform MuzzleFlashPrefab;
public Transform HitPrefab;
float timeToSpawnEffect = 0;
public float effectSpawnRate = 10;

float timeToFire = 0;
Transform firePoint;

// Use this for initialization
void Awake () {
    firePoint = transform.FindChild("FirePoint");   
    if(firePoint == null)
    {
        Debug.LogError("No FirePoint");
    }
}

// Update is called once per frame
void Update () {
    if(fireRate == 0)
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Shoot();
        }
    }else
    {
        if(Input.GetButton("Fire1") && Time.time > timeToFire)
        {
            timeToFire = Time.time + 1 / fireRate;
            Shoot();
        }
    }
}

void Shoot()
{
    Vector2 mousePosition = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y);
    Vector2 firePointPosition = new Vector2(firePoint.position.x, firePoint.position.y);
    RaycastHit2D hit = Physics2D.Raycast(firePointPosition,mousePosition - firePointPosition,100,whatToHit);

    Debug.DrawLine(firePointPosition, (mousePosition - firePointPosition) * 100,Color.cyan);
    if(hit.collider != null)
    {
        Debug.DrawLine(firePointPosition, hit.point, Color.red);
        Enemy enemy = hit.collider.GetComponent<Enemy>();
        if(enemy != null)
        {
            enemy.DamageEnemy(Random.Range(maxDamage/2,maxDamage));
          //  Debug.Log("we hit" + hit.collider.name + " and did: " + maxDamage + " damage");        
        }
    }

    if (Time.time >= timeToSpawnEffect)
    {
        Vector3 hitPos;
        Vector3 hitNormal;

        if (hit.collider == null)
        {
            hitPos = (mousePosition - firePointPosition) * 30;
            hitNormal = new Vector3(9999, 9999, 9999);
        }
        else
        {
            hitPos = hit.point;
            hitNormal = hit.normal;
        }

        Effect(hitPos,hitNormal);
        timeToSpawnEffect = Time.time + 1 / effectSpawnRate;
    }
}

void Effect(Vector3 hitPos, Vector3 hitNormal)
{
    Transform trail = Instantiate(BulletTrailPrefab,firePoint.position,firePoint.rotation) as Transform;
    LineRenderer lr = trail.GetComponent<LineRenderer>();

    if(lr != null)
    {
        // Set positions
        lr.SetPosition(0, firePoint.position);
        lr.SetPosition(1, hitPos);
    }

    Destroy(trail.gameObject, 0.035f);

    if (hitNormal != new Vector3(9999, 9999, 9999))
    {
        Transform hitParticle = Instantiate(HitPrefab, hitPos, Quaternion.FromToRotation(Vector3.right,hitNormal)) as Transform;
        hitParticle.parent = transform.parent;
        Destroy(hitParticle.gameObject, 0.3f);
    }       


    Transform clone = Instantiate(MuzzleFlashPrefab, firePoint.position, firePoint.rotation);
    clone.parent = firePoint;
    float size = Random.Range(0.3f, 0.5f);
    clone.localScale = new Vector3(size, size, size);
    Destroy(clone.gameObject, 0.02f);
}
}

enter image description here

我一直试图弄清楚现在几个小时的错误。检查代码的次数太多,不知道如何谷歌这个问题。只是无法理解为什么它会击中除了那艘太空船以外的所有物品。

不知道您可能需要哪些其他信息,请告诉我您是否还需要更多信息。

0 个答案:

没有答案