/***********************
* Title:
* FileName:
* Date: 2020
* Author: 玄策
* Version: 1.0
* UnityVersion: 2019.2.4f1
* Description:
* Func:
* - 使用方法:在需要跟随的物体的脚本OnMouseDown中上添加下两行代码
* CamFollow.Instance.Obj = gameObject;
CamFollow.Instance.followObj();
***********************/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
public class CamFollow : SingletonMono<CamFollow>
{
GameObject gameObj; //要跟随的物体
GameObject Cam;
//public Vector3 StartCamPos; //摄像机跟随物体前的位置信息
//public Vector3 StartCamRo;
bool isPosTrue; //是否跟随点击物体
Vector3 v; ////物体与摄像机的向量
void Awake()
{
Cam = Camera.main.gameObject;
//StartCamPos = Cam.transform.position; //记录初始位置
//StartCamRo = Cam.transform.eulerAngles;
}
void Update()
{
//摄像机一直跟随
if (isPosTrue)
{
if (gameObj != null)
{
Cam.transform.position = gameObj.transform.position - v.normalized * 5;
Cam.transform.LookAt(gameObj.transform);
}
if (Input.GetMouseButtonDown(1) || Input.GetMouseButtonDown(2))
{
breakObj();
}
}
}
/// <summary>
/// 跃进观看并跟随动
/// </summary>
public void FollowObj(GameObject Obj)
{
gameObj = Obj;
//关闭相机控制
Camera.main.GetComponent<CameraController_xc>().enabled = false;
//记录初始位置
//StartCamPos = Cam.transform.position;
//StartCamRo = Cam.transform.eulerAngles;
//跟随物体
StartCoroutine(followToObj(Obj));
}
IEnumerator followToObj(GameObject Obj)
{
Cam.transform.LookAt(Obj.transform); //摄像机朝向物体
v = Obj.transform.position - Cam.transform.position;
//移动动画
Cam.transform.DOLocalMove(Obj.transform.position - v.normalized * 5, 1).SetEase(Ease.Linear);;
yield return new WaitForSeconds(1);
isPosTrue = true;
}
/// <summary>
/// 恢复正常视角
/// </summary>
public void breakObj()
{
//关闭跟随
isPosTrue = false;
Camera.main.GetComponent<CameraController_xc>().enabled = true;
}
//2.-------------------------
//后写的通用方法,只跃进查看
//public void FollowObj(GameObject Obj)
//{
// StartCoroutine(FollowToObj(Obj));
//}
//IEnumerator FollowToObj(GameObject Obj)
//{
// yield return new WaitForSeconds(0);
// v = Obj.transform.position - Camera.main.transform.position;
// //移动动画
// Camera.main.transform.DOLocalMove(Obj.transform.position - v.normalized * 5, 1).SetEase(Ease.Linear);
// Camera.main.transform.LookAt(Obj.transform); //摄像机朝向物体
//}
}
Unity点击物体摄像机推进跟随
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- usingUnityEngine; usingSystem.Collections; publicclassMod...