58 lines
1.8 KiB
C#
58 lines
1.8 KiB
C#
![]() |
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using UnityEngine;
|
|||
|
using Sirenix.OdinInspector;
|
|||
|
using Cinemachine;
|
|||
|
|
|||
|
/*
|
|||
|
更新日期2021.7.24 视差类
|
|||
|
使用方式:将类挂载到需要视差的背景上,将主摄像机赋值给Cam,调节视差率即可
|
|||
|
注意 移动的背景一定要比不移动的面积大
|
|||
|
*/
|
|||
|
//视差类,霄酱写的🤔
|
|||
|
[ExecuteAlways]
|
|||
|
public class Parallax : MonoBehaviour
|
|||
|
{
|
|||
|
|
|||
|
public Transform Cam;//视差摄像机
|
|||
|
[Header("代表水平方向上、随着相机运动的倍率。")]
|
|||
|
public float moveRate;//视差率
|
|||
|
[Header("有时候视差起点会被不可抗力污染,当场景的东西位置乱了,就手动处理一下这个值吧")]
|
|||
|
public float startPoint;//起点,自动获取
|
|||
|
// Start is called before the first frame update
|
|||
|
void Start()
|
|||
|
{
|
|||
|
//startPoint = transform.position.x;//获取当前起点位置
|
|||
|
//startPoint = transform.localPosition.x;//获取当前起点位置
|
|||
|
}
|
|||
|
|
|||
|
void TheUpdate()
|
|||
|
{
|
|||
|
if(Cam == null)
|
|||
|
{
|
|||
|
Debug.LogError("视差摄像机未赋值,把主摄像机赋值给Cam就行");
|
|||
|
return;
|
|||
|
}
|
|||
|
//每帧更新位置
|
|||
|
//transform.position = new Vector2(startPoint + Cam.position.x * moveRate, transform.position.y);
|
|||
|
transform.localPosition = new Vector2(startPoint + Cam.position.x * moveRate, transform.position.y);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//为了解决Updata矛盾,使用了以下代码
|
|||
|
private void OnEnable()
|
|||
|
{
|
|||
|
CinemachineCore.CameraUpdatedEvent.AddListener(CameraUpdate);
|
|||
|
}
|
|||
|
|
|||
|
private void OnDisable()
|
|||
|
{
|
|||
|
CinemachineCore.CameraUpdatedEvent.RemoveListener(CameraUpdate);
|
|||
|
}
|
|||
|
|
|||
|
private void CameraUpdate(CinemachineBrain arg0)
|
|||
|
{
|
|||
|
TheUpdate();
|
|||
|
}
|
|||
|
}
|