Unity简单实现FPS第一人称视角(一).
Unity简单实现FPS第一人称视角(二).
Unity简单实现FPS第一人称视角(四).
该摄像头是专门用来显示小地图的
1、在菜单栏中选中GameObject->Camera创建一个摄像机,并将它命名为CameraMap。
2、选中CameraMap摄像头,点击坐标系的y轴,最后选择菜单栏上的GameObject->Aligh With View。
3、这样就使得照相机是从上往下拍摄的了。然后再根据CameraMap的Camera Preview调整一下CameraMap的位置。
4、修改CameraMap的参数如下所示。
ViewPort Rect的x和y表示的是分屏幕再主屏幕上的位置(0,0)表示坐下角,(1,1)表示右上角,取值范围为0-1之间。h和w表示的是高度和宽度。Field of View为视野的大小。
1、在Hierarchy视图上选择Create->Sphere创建出一个球体并命名为dummy。将该球体置于Player游戏体层级下。
2、随便给dummy游戏体赋予一个任意颜色的材质球。
主角再地图上就用dummy这个模型来显示。但是我们不想再游戏中也看到这个dummy,所以我们需要接下来的步骤。
1、选择菜单栏Edit->ProjectSetting->Tags and Layers。
2、选择Layers,添加两个Layer,level和dummy。其中dummy是主角,地图上显示的模型图层,另一个level是场景的图层。
3、选择dummy游戏体将他的layer设置为dummy,并取消选中Sphere Collide。免得它影响游戏。
4、同理给场景的Layer设置为level。注意Plane场景下的所有子游戏体的Layer都要设为level。
5、MainCamera中显示的是游戏第一人称视角,不需要显示dummy球体。因此我们再设置显示的Layer上取消选中dummy。
6、同理再CameraMap中只需要显示场景level和dummy其他都不需要显示。
这时候运行的话还有一点问题。就是人物一旦移动到地图可视视角的外面就会看不到人。所以我们需要CameraMap跟随主角。
7、创建miniCamera.cs脚本,并添加代码如下。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MiniCamera : MonoBehaviour
{
// Start is called before the first frame update
public Transform m_player;
float height;
void Start()
{
float ratio = (float)Screen.width / (float)Screen.height;
this.GetComponent<Camera>().rect = new Rect(1 - 0.2f, (1 - 0.2f * ratio), 0.2f, 0.2f * ratio);
height = transform.position.y;
}
// Update is called once per frame
void Update()
{
this.transform.position = m_player.transform.TransformPoint(0, height, 0);
}
}
这时候运行游戏就会看到小地图的效果了。但是其实还有一个缺点那就是我们选则的小球是分辨不出朝向的。因此无法实现Player在小地图的朝向。这个问题以后再处理。