PS:该案例来自学习的课本和我自己的理解。首次文章创作,还请多多支持呀各位美女、帅哥们!!!
*废话不多说先上游戏实机操作视频*
射击游戏实机操作_Trim
游戏内容大致如下:
(1)完全使用键盘控制,由W、A、S、D键控制角色的方向移动,J键控制射击。(这样做主要是为了简化游戏输入部分的逻辑。)
(2)玩家具有多种武器,如手枪、霞弹枪和自动步枪,每种武器可以按Q键切换。
(3)场景上除了玩家角色还有若干敌人。敌人会向玩家方向移动并射击玩家。
(4)玩家角色和敌人都有生命值,中弹后生命值减少,减为零时则死亡。
那么接下来就看看实现过程吧!文末有游戏半成品分享,不嫌弃就玩玩看哈。
目录
场景中,平台平面设为20x20的Plane
1.角色脚本
首先我们要创建出游戏玩家和敌人,包含(生命、移速等)属性,并给予他们特定的移动机制如下
玩家:自由移动,但活动限制在平台区域。
敌人:始终朝向敌人移动,但速度相对较慢。
玩家脚本(Player)代码如下:
//移动速度
public float c_speed;
//最大血量
public float m_maxHp ;
//输入方向变量
Vector3 c_input;
//判断是否死亡
bool LifeState=true;
//当前血量
private float c_Hp;
void Start()
{
//刚开始满血
c_Hp = m_maxHp;
}
void Update()
{
//将键盘的横向、纵向输入,保存在input中
c_input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
bool fireKeyDown = Input.GetKeyDown(KeyCode.J);
bool fireKeyPressed = Input.GetKey(KeyCode.J);
bool changeWeapon = Input.GetKeyDown(KeyCode.Q);
//判断是否dead,还活着就可以动
Debug.Log("现在还剩血量:" + c_Hp);
void Move()
{
//先归一化输入变量,让输入更直接,避免同时斜向移动时速度超过最大值
c_input =c_input.normalized;
transform.position += c_input * c_speed * Time.deltaTime;
//令角色前方与移动方向一致
if (c_input.magnitude > 0.1f)
{
transform.forward = c_input;
}
//限制移动范围
Vector3 c_VectorTemp=transform.position ;
const float m_border = 20f;
if(c_VectorTemp.x < -m_border)
{