-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMovement_Camera.cs
More file actions
154 lines (135 loc) · 5.3 KB
/
Movement_Camera.cs
File metadata and controls
154 lines (135 loc) · 5.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Movement_Camera : MonoBehaviour
{
private enum CameraOptionsPos { None, Follow }
private enum CameraOptionsRot { None, Follow }
[Header("Options")]
[SerializeField] private Transform _Target = null;
[SerializeField] private CameraOptionsPos _CameraOptionPos = CameraOptionsPos.Follow;
[SerializeField] private CameraOptionsRot _CameraOptionRot = CameraOptionsRot.Follow;
[Header("Offset")]
[SerializeField] private Vector3 _OffsetPosition = new Vector3(0, 12, -4);
[SerializeField] private Vector3 _OffsetRotation = Vector3.zero;
[Header("Settings")]
[SerializeField] private float _Speed = 3;
[SerializeField] private bool _LerpPosition = true;
[Header("Contraints")]
[SerializeField] private bool _LockAxis_X = false;
[SerializeField] private bool _LockAxis_Y = false;
[SerializeField] private bool _LockAxis_Z = false;
private Vector3 _TargetPosition;
private float _ScreenShakeDuration;
private float _ScreenShakeIntensity;
//CutScenes
private bool _CutScene;
private GameObject _CutSceneTarget;
private Vector3 _CutScenePosition;
private Vector3 _CutSceneRotation;
private bool _CutSceneFollow;
public static Movement_Camera CAM;
private void Awake()
{
CAM = this;
}
void Update()
{
//Update Target Location
float x_axis = _Target.transform.position.x + _OffsetPosition.x;
float y_axis = _Target.transform.position.y + _OffsetPosition.y;
float z_axis = _Target.transform.position.z + _OffsetPosition.z;
if (!_CutScene)
{
//Lock Axis
if (_LockAxis_X)
x_axis = _OffsetPosition.x;
if (_LockAxis_Y)
y_axis = _OffsetPosition.y;
if (_LockAxis_Z)
z_axis = _OffsetPosition.z;
_TargetPosition = new Vector3(x_axis, y_axis, z_axis);
//Movement
switch (_CameraOptionPos)
{
case CameraOptionsPos.Follow:
if (_LerpPosition)
transform.position = Vector3.Lerp(transform.position, _TargetPosition, _Speed * Time.deltaTime);
else
transform.position = Vector3.MoveTowards(transform.position, _TargetPosition, _Speed * Time.deltaTime);
break;
}
//ScreenShake
if (_ScreenShakeDuration > 0)
{
transform.localPosition = new Vector3(transform.position.x + Random.insideUnitSphere.x * _ScreenShakeIntensity, transform.position.y + Random.insideUnitSphere.y * _ScreenShakeIntensity, transform.position.z);
_ScreenShakeDuration -= 1 * Time.deltaTime;
}
else
{
// Rotation
switch (_CameraOptionRot)
{
case CameraOptionsRot.Follow:
Vector3 rpos = _Target.position - transform.position;
Quaternion lookrotation = Quaternion.LookRotation(rpos, Vector3.up);
transform.eulerAngles = new Vector3(lookrotation.eulerAngles.x + _OffsetRotation.x, lookrotation.eulerAngles.y + _OffsetRotation.y, lookrotation.eulerAngles.z + _OffsetRotation.z);
break;
}
}
}
else //CutScene
{
//Position
_TargetPosition = _CutScenePosition;
if (_LerpPosition)
transform.position = Vector3.Lerp(transform.position, _TargetPosition, _Speed * Time.deltaTime);
else
transform.position = Vector3.MoveTowards(transform.position, _TargetPosition, _Speed * Time.deltaTime);
//Target
if (_CutSceneFollow)
{
Vector3 rpos = _CutSceneTarget.transform.position - transform.position;
Quaternion lookrotation = Quaternion.LookRotation(rpos, Vector3.up);
transform.eulerAngles = new Vector3(lookrotation.eulerAngles.x + _CutSceneRotation.x, lookrotation.eulerAngles.y + _CutSceneRotation.y, lookrotation.eulerAngles.z + _CutSceneRotation.z);
}
else
transform.eulerAngles = _CutSceneRotation;
}
}
//Effects
public void Effect_ScreenShake(float duration, float intesity)
{
_ScreenShakeDuration = duration;
_ScreenShakeIntensity = intesity;
}
//GetSet
public Transform CameraTarget
{
get { return _Target; }
set { _Target = value; }
}
public Vector3 Camera_OffSetPosition
{
get { return _OffsetPosition; }
set { _OffsetPosition = value; }
}
public Vector3 Camera_OffSetRotation
{
get { return _OffsetRotation; }
set { _OffsetRotation = value; }
}
//CutScene
public void CutScene(bool startcutscene)
{
_CutScene = false;
}
public void CutScene(bool startcutscene, Vector3 cutscenepos, GameObject targetobj, Vector3 cutscenerot, bool follow)
{
_CutScene = startcutscene;
_CutScenePosition = cutscenepos;
_CutSceneTarget = targetobj;
_CutSceneRotation = cutscenerot;
_CutSceneFollow = follow;
}
}