个人主页:@元宇宙-秩沅
hallo 欢迎 点赞 收藏⭐ 留言 加关注✅!
本文由 秩沅 原创
收录于专栏:unity每日一记
⭐【软件设计师高频考点暴击】
⭐【Unityc#专题篇】之c#系统化大礼包】
⭐【unity数据持久化】数据管理类_PlayerPrfs
⭐【unity本站最全系列】unity常用API大全一篇文章足以
今天我们主要介绍啊以下2个进行发射的方法
1.通过面板上发射的位置来进行发射
2.通过代码应用我们向量相关的知识点来进行发射
在这里呢我们在主物体上设置了3个子对象啊这 3个子对象的位置就是用来发射的 3个位置
那么这里就是我们通过面板上设置发射位置
1.设置选择子弹类型的枚举类型
2.封装按键相关api按键为1到 4和空格作用为1到 4是选择子弹数量类型,空格则是发射键
3.而后根据枚举类型进行子弹发射的实例化封装通过向量加减来实现发射位置的偏移,通过向量的4元数旋转来实现发射位置的旋转偏移,
️涉及口诀:
位置-位置=位置
4元数*4元数=旋转角度
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能:向量相关控制子弹发射
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
//首先选择子弹发射的数量类型,我们在这里设置枚举类型
public enum Shoot_Type
{
one, //一个
two, //两个
mutiply,//多个
around //围绕
}
public class Shoot : MonoBehaviour
{
public Shoot_Type type;
public GameObject bullet; //子弹
public int i = 10;
void Start()
{
}
// Update is called once per frame
void Update()
{
if(Input.GetKeyDown(KeyCode.Alpha1))
{
type = Shoot_Type.one;
}
else if(Input.GetKeyDown(KeyCode.Alpha2))
{
type = Shoot_Type.two ;
}
else if (Input.GetKeyDown(KeyCode.Alpha3))
{
type = Shoot_Type.mutiply ;
}
else if (Input.GetKeyDown(KeyCode.Alpha4))
{
type = Shoot_Type.around ;
}
else if (Input.GetKeyDown(KeyCode.Space ))
{
Fire();
}
}
public void Fire()
{
switch (type)
{
case Shoot_Type.one:
Instantiate(bullet, transform.position, transform.rotation );
break;
case Shoot_Type.two:
Instantiate(bullet, transform.position-Vector3 .right *2, transform.rotation);
Instantiate(bullet, transform.position+Vector3.right * 2, transform.rotation);
break;
case Shoot_Type.mutiply:
Instantiate(bullet, transform.position, transform.rotation);
Instantiate(bullet, transform.position - Vector3.right, transform.rotation * Quaternion.AngleAxis(-10, Vector3.up ));
Instantiate(bullet, transform.position - Vector3.right*2, transform.rotation * Quaternion.AngleAxis(-20, Vector3.up ));
Instantiate(bullet, transform.position + Vector3.right, transform.rotation * Quaternion.AngleAxis(10, Vector3.up));
Instantiate(bullet, transform.position + Vector3.right * 2, transform.rotation * Quaternion.AngleAxis(20, Vector3.up));
break;
case Shoot_Type.around:
Instantiate(bullet, transform.position, transform.rotation);
for (int i = 0; i < 180; i+=10)
{
Instantiate(bullet, transform.position - Vector3.right, transform.rotation * Quaternion.AngleAxis(-i, Vector3.up));
Instantiate(bullet, transform.position - Vector3.right, transform.rotation * Quaternion.AngleAxis(i, Vector3.up));
}
break;
default:
break;
}
}
}
⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
你们的点赞 收藏⭐ 留言 关注✅是我持续创作,输出优质内容的最大动力!、