摄像机跟随、视野远近、视野环绕、小地图
2017-07-21 本文已影响55人
_凉笙
摄像机跟随人物
private Transform Player;
//偏移值
private Vector3 offsetPosition;
void Start () {
//根据Tag值取得游戏对象的transform
Player = GameObject.FindGameObjectWithTag("Player").transform;
//摄像机朝向游戏对象
transform.LookAt(Player.transform);
//偏移量
offsetPosition = transform.position - Player.position;
}
void Update () {
//摄像机跟随
transform.position = offsetPosition + Player.position;
}
1点31分32秒.gif
摄像机视野拉近拉远
//距离
public float distance = 0;
public float scrollSpeed = 10;
/// <summary>
/// 处理视野拉近拉远效果
/// </summary>
private void scroliView() {
// Input.GetAxis("Mouse ScrollWheel")//滚轮向前滑动返回正值,向后滑动返回负值
distance = offsetPosition.magnitude;//得到摄像机与Player的距离
distance -= Input.GetAxis("Mouse ScrollWheel")*scrollSpeed;// 距离拉近放大,那distance就会减少,所以-=一个正值那滚轮向前就会放大
distance = Mathf.Clamp(distance,2,18);//距离限制,距离在2到18之间
offsetPosition = offsetPosition.normalized * distance;//offsetPosition.normalized返回的长度为1,相当于吧偏移量的长度设为distance
}
33分52秒.gif
控制视野环绕效果
private bool isRotating = false;
// 旋转的速度
public float rotateSpeed = 2f;
/// <summary>
/// 处理视野的旋转
/// </summary>
void RotateView() {
//Input.GetAxis("Mouse X");//得到鼠标在水平方向的滑动
//Input.GetAxis("Mouse X");//得到鼠标在垂直方向的滑动
if (Input.GetMouseButtonDown(1))
{
isRotating = true;
}
else if (Input.GetMouseButtonUp(1)) {
isRotating = false;
}
if (isRotating) {
transform.RotateAround(Player.position, Player.up, rotateSpeed * Input.GetAxis("Mouse X"));//围绕游戏对象的X轴进行旋转
Vector3 originaPos = transform.position;
Quaternion originalRotation = transform.rotation;
transform.RotateAround(Player.position, transform.right, -rotateSpeed * Input.GetAxis("Mouse Y"));//围绕摄像机的Y轴进行旋转
float x = transform.eulerAngles.x;//eulerAngles为Rotationg
//限制范围,X旋转到10到80之间
if (x < 10||x>80) {
transform.position = originaPos;
transform.rotation = originalRotation;
}
}
offsetPosition = transform.position - Player.position;
}
21日12点27分50秒.gif
小地图
小地图如何制作呢,首先我们创建一个小地图的摄像机让人物对象成为其父对象、
Paste_Image.png
随后我们创建一个Render Texture并命名为Minimap,再将Minimap拖入我们小地图摄像机的Target Texture上这样我们的Minimap就取得了摄像机上的图像了.
Paste_Image.png
Paste_Image.png 然后我们再创建一个材质球,并将Shader类型改为Custom/Mask,然后将Render Texture和一个遮罩贴图放上。
Paste_Image.png
然后创建一个Image将Minimap材质进去就OK了。
Paste_Image.png 好吧,效果有点丑,但是我们加上框架就不错了,下面我们去实现小地图放大缩小的功能。
Paste_Image.png
private Camera minimapCamera;
void Start() {
minimapCamera = GameObject.FindGameObjectWithTag(Tags.minimap).GetComponent<Camera>();
}
public void OnZoomInClick() {
//放大
minimapCamera.orthographicSize--;
}
public void OnZoomOutClick() {
//缩小
minimapCamera.orthographicSize++;
}
点27分11秒.gif