unity 朝向目标物体发射子弹

朝着目标物体发射子弹,子弹在两点之间平均分布,可以控制平均角度,离点半径和数量
在这里插入图片描述

 /// <summary>
    ///  实例化子弹
    /// </summary>
    /// <param name="_obj">预制</param>
    /// <param name="_parent">节点</param>
    /// <param name="_r">半径</param>
    /// <param name="_num">子弹数量</param>
    /// <param name="_angleArea">平分角度[0-360]</param>
    /// <param name="_pointA"></param>
    /// <param name="_pointB"></param>
    void SpawnPoint(Transform _obj, Transform _parent, float _r, int _num, float _angleArea, Vector3 _pointA, Vector3 _pointB)
    {
        float jiajiao = GetAngle(_pointA, _pointB).z;
        if (_angleArea > 360)
            _angleArea -= 360;

        float _angle = -jiajiao + (_angleArea / _num) * (_num - 1) * 0.5f;

        for (int i = 0; i < _num; i++)
        {
            Transform tr = Instantiate(_obj, _parent);

            float hudu = _angle * Mathf.Deg2Rad;


            float xx = _pointA.x + _r * Mathf.Sin(hudu);
            float yy = _pointA.y + _r * Mathf.Cos(hudu);

            Vector3 newPoint = new Vector3(xx, yy, 0);
            tr.position = newPoint;
            tr.eulerAngles = GetAngle(_pointA, newPoint);

            _angle -= _angleArea / _num;
        }
    }
 /// <summary>
    /// 求夹角-2d
    /// </summary>
    /// <param name="aPoint"></param>
    /// <param name="bPoint"></param>
    /// <returns></returns>
    Vector3 GetAngle(Vector3 aPoint, Vector3 bPoint)
    {
         
       Vector3 direct= bPoint - aPoint;
        Vector3 normal = Vector3.Cross(Vector2.up, direct.normalized);
        #region 点乘求夹角
        /*
          float normal1 = Vector3.Dot(Vector2.up, direct.normalized);
         float angle = Mathf.Acos(normal1) * Mathf.Rad2Deg;
      */
        #endregion
        float zAngle = Vector2.Angle(Vector2.up, direct.normalized);
       // Debug.Log($"{zAngle},{normal}");
          zAngle = normal.z > 0 ? zAngle : -zAngle;
        return new Vector3(0,0, zAngle);

    }

下载链接
https://download.csdn.net/download/sinat_38829681/89669940

Unity中,你可以通过编写脚本来实现让指定物体发射子弹的功能。以下是一个简单的示例: 1. 首先,创建一个空物体并将其命名为"Player",将其作为发射子弹的对象。 2. 创建一个脚本,并将其附加到"Player"物体上。你可以命名脚本为"BulletController"。 3. 在"BulletController"脚本中,添加以下代码: ``` using UnityEngine; public class BulletController : MonoBehaviour { public GameObject bulletPrefab; public Transform bulletSpawnPoint; public float bulletSpeed = 10f; void Update() { if (Input.GetButtonDown("Fire1")) // 当按下指定的发射子弹的按钮时 { FireBullet(); } } void FireBullet() { GameObject bullet = Instantiate(bulletPrefab, bulletSpawnPoint.position, bulletSpawnPoint.rotation); Rigidbody bulletRigidbody = bullet.GetComponent<Rigidbody>(); bulletRigidbody.velocity = bulletSpawnPoint.forward * bulletSpeed; } } ``` 在上述代码中,我们使用了一个预制体(bulletPrefab)来表示子弹,一个子弹生成(bulletSpawnPoint)来确定子弹的初始位置和方向,以及子弹的速度(bulletSpeed)。 4. 在Unity编辑器中,将子弹的预制体创建好,并将其赋值给"BulletController"脚本中的bulletPrefab。 5. 确保你在Unity中设置了一个按钮来触发子弹发射的动作。在上述代码中,我们使用了Input.GetButtonDown("Fire1")来检测按钮按下的事件。你可以根据自己的需求来设置按钮。 现在,当你按下指定的按钮时,"Player"物体发射子弹子弹将会从bulletSpawnPoint位置发射,并且具有bulletSpeed的速度。 请注意,以上只是一个简单的示例代码,你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XyX许

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值