第一人称射击游戏——总结1

本次游戏制作分为三个大的部分
(1)玩家制作
1.生命
2.攻击
3.死亡
4.移动
(2)敌人制作
1.生命
2.攻击
3.死亡
4.移动
5.自动寻路
(3)UI设计
1.分数显示
2.分数更新
3.子弹数量更新

(1)玩家制作
1.选中Ganmeobject——Creat Empty创建个空的游戏物体来作为玩家,Tag设置为Player
2.为其添加Character Controller(角色控制组件),可以实现在控制主角移动时与场景的碰撞产生交互;添加Rigibody组件,并取消Use Gravity去掉重力模拟,再选中 Is Kinematic 使其不受物理演算影响
在这里插入图片描述
3.创建脚本,初始化角色生命值并使其能进行移动
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Player : MonoBehaviour
{
//…获取游戏组件…
public Transform m_transform;
CharacterController m_ch;//角色控制组件
//…角色基本属性…
float m_movSpeed = 3.0f; //角色移动速度
float m_gravity = 2.0f; //重力
public int m_life = 5; //角色生命值
//…主角出现后需要实现的东西…
void Start()
{
m_transform = this.transform;
m_ch = this.GetComponent(); //获取角色控制器组件
}
// …事件…
void Update()
{
if (m_life <= 0) //如果生命值为0,则什么事都不做
return;
Control();
}
void Control()
{
//…控制主角移动代码…
float xm = 0, ym = 0, zm = 0; //定义三个值控制移动
ym -= m_gravity * Time.deltaTime; //重力运动
if (Input.GetKey(KeyCode.W)) //上下左右运动
{
zm += m_movSpeed * Time.deltaTime;
}
else if (Input.GetKey(KeyCode.S))
{
zm -= m_movSpeed * Time.deltaTime;
}
else if (Input.GetKey(KeyCode.A))
{
xm -= m_movSpeed * Time.deltaTime;
}
else if (Input.GetKey(KeyCode.D))
{
xm += m_movSpeed * Time.deltaTime;
}
m_ch.Move(m_transform.TransformDirection(new Vector3(xm, ym, zm))); //使用角色控制器提供的Move函数进行移动,它会自动检测碰撞

}
//..........................在编辑器中为主角显示一个图标.........................
private void OnDrawGizmos()
{
    Gizmos.DrawIcon(this.transform.position, "Spawn.tif");
}

}

4.将摄像机与玩家关联起来
(1)现在Player脚本内添加如下代码
//摄像机所需参数
private Transform m_camTransform; //摄像机的Transform
Vector3 m_camRot; //摄像机的旋转角度
float m_camHeight=1.4f; //摄像机高度(玩家高度)
(2)修改Start,初始化摄像机的位置和旋转角度,并锁定鼠标
//…初始化摄像机的位置和旋转角度,并锁定鼠标…
m_camTransform = Camera.main.transform; //获取主摄像机
m_camTransform.position = m_transform.TransformPoint(0, m_camHeight, 0); //设置摄像机初始位置
m_camTransform.rotation = m_transform.rotation;
m_camRot = m_camTransform.eulerAngles; //设置摄像机的旋转方向与主角一致
(3)在control加入一下代码
//…设置旋转摄像机,使主角移动后摄像机的位置与主角保持一致…
float rh = Input.GetAxis(“Mouse X”);
float rv = Input.GetAxis(“Mouse Y”); //获取鼠标移动距离

    m_camRot.x -= rv;
    m_camRot.y += rh;
    m_camTransform.eulerAngles = m_camRot;    //旋转摄像机

    Vector3 camrot = m_camTransform.eulerAngles;
    camrot.x = 0;
    camrot.z = 0;
    m_transform.eulerAngles = camrot;          //使主角的面向方向与摄像机保持一致
    (控制主角移动代码下面)
    m_camTransform.position = m_transform.TransformPoint(0, m_camHeight, 0);//更新摄像机的位置

(4)此时玩家已经可以自由的行走了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值