【问题标题】:How to make an enemy shoot the player in unity 2d如何让敌人在统一 2d 中射击玩家
【发布时间】:2021-07-12 20:09:59
【问题描述】:

到目前为止,敌人可以跟随玩家并可以将枪对准玩家。我现在唯一需要做的就是让敌人向玩家射击。

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

public class Enemy : MonoBehaviour
{

    public GameObject player;
    public GameObject gun;

    void Update()
    {
        Vector3 difference = player.transform.position - gun.transform.position;
        float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
        gun.transform.rotation = Quaternion.Euler(0.0f, 0.0f, rotationZ);

    }
}

【问题讨论】:

    标签: unity3d 2d


    【解决方案1】:

    根据你是想使用移动的子弹还是只是“我指向他会受到伤害”,有两种方法。

    第一道

    因此,您必须创建一个 Bulletprefab 和一些应该生成它的位置。没有,当你的敌人面对它可以射击的玩家时(最好有一个canown)。因此,您实例化子弹预制件,然后向子弹添加力。这可能如下所示:

    // Some Attribute
    public float fireRate = 0.5f;
    private float nextFire = 0.0f;
    
    // In Update
    if(Time.time > nextFire) {
        if(!Bullet)
            return;
        nextFire = Time.time + fireRate;
        GameObject clone = Instantiate(Bullet, ShootPoint.position,ShootPoint.rotation);
        Rigidbody rb = clone.GetComponent<Rigidbody>();
        rb.AddRelativeForce(Vector3.forward * bulletSpeed, ForceMode.Impulse);
    }
    

    现在您还可以像手榴弹一样向上发射子弹,或者将其刚体的重力设置为假,使其直线飞行。 Here拍摄教程。

    第二种方式

    您可以使用 Raycast 直接向前射击并检测您击中的东西。如果它确实击中了玩家,则对其造成伤害。就这么简单

    Raycast

    【讨论】:

    • Assets\Scripts\Enemy.cs(26,64):错误 CS1503:参数 2:无法从“UnityEngine.ForceMode2D”转换为“UnityEngine.ForceMode”
    • Assets\Scripts\Enemy.cs(20,13):错误 CS0103:当前上下文中不存在名称“isShootReady”
    • 我什么时候会说“isShootReady = true”和“isShootReady = false”
    • 哦,是的,我的错,你必须在 ForceMode 上擦除 2D(我会在答案中更改它)。 IsShootReady 将是您添加的一个属性,当他看到敌人时您将其设置为真,当他射击时将其设置为您想要的假时间,以便在您的射击期间有延迟。
    • @Jack_AKA_Oscar 所以我更新了它。你现在应该可以这样使用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    相关资源
    最近更新 更多