一。新建关卡
File,Save Scene,
File
,
New Scene
,
File
,
Save Scene as…
,
Level02.unity
1.建立场景
从Assets中拖放场景模型到Hierarchy中,
2.为游戏体添加多边形碰撞体
在Hierarchy中选择3个构造游戏空间的游戏体,
Component
,
Physics
,
Mesh Collider
,
操作后,游戏空间游戏体可以用于物理碰撞检测。
3.创建灯光
现在游戏空间内光线不好,调整一下,
1)创建电光源
根据需求,创建若干。可使用Ctrl + D 快速复制,
2)调整亮度
二。创建玩家
1.创建空对象
GameObject,Create Empty,
在
Hierarchy
中将之命名为
FPSPlayer
,
2.设置标签
选择FPSPlayer,Inspector,Tag,修改为“Player”,
3.添加角色控制器
FPSPlayer仍旧被选中,
Component
,
Physics
,
Character Controller
,
执行这一步后,玩家在场景中移动时,会和其它游戏体发生物理交互。
4.添加刚体属性
仍旧选中玩家,
Component
,
Physics
,
Rigidbody
,
5.控制脚本
首先
,创建FPSPlayer.cs脚本,
using UnityEngine;
using System.Collections;
[AddComponentMenu("MyGame/FPSPlayer")]
public class FPSPlayer : MonoBehaviour {
private CharacterController m_ch; // 玩家角色控制器
public Transform m_transform; // 玩家实例
private float m_movSpeed = 3.0f; // 玩家移动基速
public int m_life = 5; // 生命值
private float m_gravity = 2.0f; // 重力
private Transform m_camTransform; // 摄像机
private Vector3 m_camRot; // 摄像机姿势-旋转角度
private float m_camHeight = 4.5f; // 摄像机高度-玩家的眼睛
void Start() {
m_transform = this.transform; // 本角色实例
m_ch = this.GetComponent<CharacterController>(); // 本角色的控制器
m_camTransform = Camera.main.transform;// 获取摄像机
/** 设置摄像机初始位置 **/
Vector3 pos = m_transform.position; // 玩家位置
pos.y += m_camHeight; // 镜头高度
m_camTransform.position = pos; // 初始化初始摄像机位置
m_camTransform.rotation = m_transform.rotation; // 初始化摄像机姿势
/**
* eulerAngles的三个变量 z,x,y 表示三个绕坐标轴旋转的角度(世界坐标轴)
* 顺序是z,x,y。如果角度超过360的话,要用Rotate来代替,用四元数来旋转
* 这三个x,y,z的值对应Inspector上的transform/Rotation的三个值
* 所绕角度是顺着坐标轴看,按逆时针旋转的角度
**/
m_camRot = m_camTransform.eulerAngles; // 存储摄像机姿势
Screen.lockCursor = true; // 锁定鼠标
}
void Update() {
if (m_life <= 0) return; // 如果生命为0,什么也不做
/**
* Input.GetAxis(string name);
* 根据坐标轴名称返回虚拟坐标系中的值。返回值类型:float
* 参数:Horizontal, Vertial, Mouse X, Mouse Y
* 其中Horizontal, Vertical 默认对应小键盘上的左右、上下键,返回值为-1或1
* Mouse X, Mouse Y 对应鼠标位置,返回值不定
* 以上都是在unity3d中预定义好的映射,可以通过 Edit->Project Settings->Input 来重新定义映射
**/
float rv = Input.GetAxis("Mouse Y"); // 鼠标 Y 轴移动距离,抬头角度
float rh = Input.GetAxis("Mouse X"); // 鼠标 X 轴移动距离,转身角度
m_camRot.x -= rv; // X轴 摄像机仰角-抬头
m_camRot.y += rh; // Y轴 摄像机旋转
m_camTransform.eulerAngles = m_camRot; // 摄像机姿势修正
// 使主角的面向方向与摄像机一致
Vector3 camrot = m_camTransform.eulerAngles; // 提取摄像机姿势
camrot.x = 0; camrot.z = 0; // 防止后退
m_transform.eulerAngles = camrot; // 玩家姿势修正
float xm = 0, ym = 0, zm = 0;
// 重力运动
ym -= m_gravity * Time.deltaTime * 10;
// 前进/后退
if (Input.GetKey(KeyCode.W))
zm += m_movSpeed * Time.deltaTime * 3;
else if (Input.GetKey(KeyCode.S))
zm -= m_movSpeed * Time.deltaTime * 3;
// 左移/右移
if (Input.GetKey(KeyCode.A))
xm -= m_movSpeed * Time.deltaTime * 3;
else if (Input.GetKey(KeyCode.D))
xm += m_movSpeed * Time.deltaTime * 3;
// 移动
m_ch.Move(m_transform.TransformDirection(new Vector3(xm, ym, zm)));
// 使摄像机的位置与主角一致
Vector3 pos = m_transform.position;
pos.y += m_camHeight;
m_camTransform.position = pos;
}
void OnDrawGizmos() {
Gizmos.DrawIcon(transform.position, "pfsPlayer.png", true);
}
}
然后
,关联到玩家游戏体,
6.创建武器
1)设置主相机
可选操作,
2)创建武器游戏体
将已经做好的武器prefab文件加入场景,
