👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:Unity游戏demo
⭐🅰️Unity3D赛车游戏⭐
文章目录
- ⭐🅰️Unity3D赛车游戏⭐
- ⭐前言⭐
- 🎶(==A==)系统优化——相机的跟随
- 为什么要优化:
- 单个场景镜头
- 多个场景镜头
- 脚本
- ⭐🅰️⭐
⭐前言⭐
–
😶🌫️版本: Unity2021
😶🌫️适合人群:Unity初学者
😶🌫️学习目标:3D赛车游戏的基础制作
😶🌫️技能掌握:
🎶(A)系统优化——相机的跟随
为什么要优化:
代码过于复杂,并且滑轮镜头不适合后续游戏的进行
单个场景镜头
- 优化如下
//相机跟随功能
public void FllowEffect()
{
//实现从不同的角度切入观看
transform.position = target.position * (1 - smoothTime) + transform.position * smoothTime;
transform.LookAt(target.parent );
smoothTime = (Control.Km_H >=150 ) ? ( Mathf .Abs(Control.Km_H)/150) - 0.85f : 0.45f;
}
- 此时代码放入了LateUpdate里面
1.优点:确实是是是跟随
2.缺点:但是会造成镜头的晃动
- 改成放入了FixedUpdate里面
原因:FixedUpdate是固定帧执行,精准的实时跟随反而会放大细节
多个场景镜头
-
设置多个场景的位置
-
输入管理更新
-
演示效果
脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:
//___________功能: 相机的管理
//___________创建者:_____秩沅_____
//_____________________________________
//-------------------------------------
public class CameraContorl : MonoBehaviour
{
//目标物体
public Transform targetOb;
public Transform[] target ;
private CarMoveControl Control;
public float speed;
//相机平滑值
public float smoothTime;
//镜头的选择
public int ChooseIndex ;
[Header("----------加速时相机属性-------------")]
//加速时的跟随力度
[Range(1, 5)]
public float shiftOff;
//目标视野 (让其显示可见)
[SerializeField ]
private float addFov;
//当前视野
private float startView;
[Range(1,10)]
public float followLerp = 1;
[Range(1,10)]
public float angleLerp = 1;
//为一些属性初始化
private void Start()
{
startView = Camera.main.fieldOfView; //将相机的开始属性赋入
addFov = 30;
//获取镜头位置
for (int i = 0; i < 3; i++)
{
target[i] = targetOb.GetChild(0).GetChild(i);
}
}
private void Update()
{
TabViewChoose(); //选择镜头
}
void FixedUpdate()
{
CameraAtrribute(); //相机属性显示
FllowEffect(); //相机跟随功能
FOXChange(); //加速时相机视野的变化
}
//选择场景
private void TabViewChoose()
{
//按下Tab键时
if(InputManager.InputManagerment.TabView)
ChooseIndex = ChooseIndex > 1 ? 0 : ChooseIndex+1;
}
//相机跟随功能
private void FllowEffect()
{
//-------1.镜头的跟随方法一---------
//实现从不同的角度切入观看
//transform.position = target[ChooseIndex].position * (1 - smoothTime) + transform.position * smoothTime;
//速度不同跟随的角度不同
//moothTime = (Control.Km_H >= 150) ? (Mathf.Abs(Control.Km_H) / 150) - 0.85f : 0.45f;
//-------2.镜头的跟随方法二---------
transform.position = Vector3.Lerp(transform.position, target[ChooseIndex].position, Time.deltaTime * speed);
transform.LookAt(targetOb );
}
//加速时相机视野的变化
private void FOXChange()
{
if(Input.GetKey(KeyCode.LeftShift) ) //按下坐标shift键生效
{
Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView , startView + addFov ,Time .deltaTime * shiftOff );
}
else
{
Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, startView, Time.deltaTime * shiftOff);
}
}
//相机属性显示
private void CameraAtrribute()
{
//实时速度
Control = targetOb.GetComponent<CarMoveControl>();
speed = Mathf.Lerp(speed, Control.Km_H / 4, Time.deltaTime);
speed = Mathf.Clamp(speed, 0, 55); //对应最大200公里每小时
}
}
⭐🅰️⭐
⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、