ue3d框架下创建Unity射击十字瞄准线

框架下创建Unity射击十字瞄准线

分类:
ue3d - 框架下创建Unity射击十字瞄准线

首先我们要在 FPS 控制器中创建一个名为 isPressed 的布尔变量。

private bool ..isPressed;

此时需要检查 Update 的方法,如果使用新的输入系统按下鼠标左键时显示十字线,则设置按下等于 true。

如下所示:

if (Mouse.current. leftButton.wasPressedThisFrame)
{
    _isPressed = true;
}

接着创建一个屏障层和一个敌人层,选择敌人和屏障并向它们添加到层中。

ue3d - 框架下创建Unity射击十字瞄准线

转到 FixUpdate 方法,创建一条投射在屏幕中央的光线,使用 Camera.main.ViewportPointToRay 来执行此操作,再使用图层蒙版先击中敌人。

[serializeField]
private GameObject _muzzleFlash;
[ SerializeField]
private Transform _firingPosition;

现在3D天堂想在每次按下鼠标左键时实例化枪口闪光,如下所示

if (Mouse.current. leftButton.wasPressedThisFrame)
{
   GameObject flash= Instantiate(_muzzleFlash,_firingPosition.transform.position,Quaternion.identity);
    flash.transform.parent = _firingPosition.transform;
    _isPressed = true;
}

当瞄准击中敌人时,敌人的身体上显示血液粒子,可以使用物理点光线投射来做到这一点。

例如:

private void FixedUpdate()
{
    if (isPressed -=true)
    {
        Ray rayOrigin = Camera.main.ViewportPointToRay(new Vector3(0.5f,0.5f,0));
        RaycastHit hitInfo;
        if (Physics.Raycast(rayOrigin,out hitInfo,Mathf.Infinity,1 <<6))
        {
            Instantiate(_enemybloodParticle,hitInfo.point +(hitInfo.normal* 0.0025f),Quaternion.LookRotation(hitiInfo.normal));
            _isPressed = false;
        }
    }
}
private void FixedUpdate()
{
    if ( _isPressed == true)
    {
         _isPressed = false;
         Ray rayOrigin = Camera.main.ViewportPointToRay(new Vector3(0.5f,0.5f,0));
         RaycastHit hitInfo;
         if(Physics.Raycast(rayOrigin,out hitInfo,Mathf.Infinity, 1 << 6 & ~(1 << c7))
         {
            if (hitInfo.collider != null)
            {
                Instantiate(_enemybloodParticle,hitInfo.point + (hitInfo.normal* 0.025f),Quaternion.identity);
                Debug.Log("IsPressed: " + _isPressed);
            }
         }
     }
}

如果使用的是 FPS 相机遇到一些常见错误,因为有时主相机标签不会有 MainCamera 标签,请确保添加此标签以避免空异常错误。

ue3d - 框架下创建Unity射击十字瞄准线

现在来检查下是否击中了敌人的对撞机,先使用 hitInfo 点对撞机,再使用 hitInfor 获取 AI 组件,最后调用 damage 方法。

注意:

为什么要再次检查命中对象的碰撞器,因为物理点射线投射会过滤 enemy_model 碰撞器。

如下所示:

private void FixedUpdate()
{
    if (_isPressed == true)
    {
        _isPressed = false;
        Ray rayOrigin = Camera.main.ViewportPointToRay(new Vector3(0.5f,0.5f,0));
        RaycastHit hitInfo;
        if (Physics.Raycast(rayOrigin,out hitInfo,Mathf.Infinity,1 <<6))
        {
            if (hitInfo.collider.gameObject . layer==6)
            {
                Debue.Log("HitInfo Name :" + hitInfo.collider.name);
                _enemy = hitInfo.collider.GetComponent<AI>();
                if (_enemy !=null)
                {
                    _enemy . Damage();
                }
                lnstantiate(_enemybloodParticle, hitlnfo.point + (hitInfo.normal*0.025f), Quaternion.identity);
            }
            else
            {
                return;

            }
         }
      }
}

但这里有一个好处是如何修复 AI 脚本中的损坏方法逻辑。

public void Damage()
{
    if (_isDead == false)
    {
        _health--;
    }
    if (_health < 1)
    {
        _health = 0;
        _isDead = true;
        _currentState = AIState.Death;
    }
}

到这里一起看看最终的效果。

ue3d - 框架下创建Unity射击十字瞄准线

以上是3D天堂关于在 Unity 中创建十字线框架的全部内容,如果你有任何反馈,请随时在本页面下方留言。

相关信息

  • 类型:知识
  • 字数:354
  • 字符:967
  • 适用软件:Unity
  • 说明:无
  • 编号:153059

热门内容

提示:3D天堂作为服务提供者,尊重网络版权及知识产权,对某些行为的发生不具备充分的监控能力,若无意间侵犯到您的权利,请 联系我们,我们会在收到信息后尽快给予处理。

本站文章版权归本站自创作者所有,未经允许不得转载!