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
|
/*
*
* Adventure Creator
* by Chris Burton, 2013-2014
*
* "Moveable.cs"
*
* This script is attached to any gameObject that is to be transformed
* during gameplay via the action ActionTransform.
*
*/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using AC;
public class Moveable : MonoBehaviour
{
public bool isMoving { get; set; }
private float moveChangeTime;
private float moveStartTime;
private MoveMethod moveMethod;
private TransformType transformType;
private Vector3 targetVector;
private Vector3 startVector;
private void FixedUpdate ()
{
if (isMoving)
{
if (Time.time < moveStartTime + moveChangeTime)
{
if (transformType == TransformType.Translate)
{
if (moveMethod == MoveMethod.Linear)
{
transform.localPosition = Vector3.Lerp (startVector, targetVector, AdvGame.LinearTimeFactor (moveStartTime, moveChangeTime));
}
else if (moveMethod == MoveMethod.Smooth)
{
transform.localPosition = Vector3.Lerp (startVector, targetVector, AdvGame.SmoothTimeFactor (moveStartTime, moveChangeTime));
}
else
{
transform.localPosition = Vector3.Slerp (startVector, targetVector, AdvGame.SmoothTimeFactor (moveStartTime, moveChangeTime));
}
}
else if (transformType == TransformType.Rotate)
{
if (moveMethod == MoveMethod.Linear)
{
transform.localEulerAngles = Vector3.Lerp (startVector, targetVector, AdvGame.LinearTimeFactor (moveStartTime, moveChangeTime));
}
else if (moveMethod == MoveMethod.Smooth)
{
transform.localEulerAngles = Vector3.Lerp (startVector, targetVector, AdvGame.SmoothTimeFactor (moveStartTime, moveChangeTime));
}
else
{
transform.localEulerAngles = Vector3.Slerp (startVector, targetVector, AdvGame.SmoothTimeFactor (moveStartTime, moveChangeTime));
}
}
else
{
if (moveMethod == MoveMethod.Linear)
{
transform.localScale = Vector3.Lerp (startVector, targetVector, AdvGame.LinearTimeFactor (moveStartTime, moveChangeTime));
}
else if (moveMethod == MoveMethod.Smooth)
{
transform.localScale = Vector3.Lerp (startVector, targetVector, AdvGame.SmoothTimeFactor (moveStartTime, moveChangeTime));
}
else
{
transform.localScale = Vector3.Slerp (startVector, targetVector, AdvGame.SmoothTimeFactor (moveStartTime, moveChangeTime));
}
}
}
else
{
isMoving = false;
}
}
}
public void Move (Vector3 _newVector, MoveMethod _moveMethod, float _transitionTime, TransformType _transformType)
{
isMoving = true;
targetVector = _newVector;
moveMethod = _moveMethod;
transformType = _transformType;
if (_transformType == TransformType.Translate)
{
startVector = transform.localPosition;
}
else if (_transformType == TransformType.Rotate)
{
startVector = transform.localEulerAngles;
}
else
{
startVector = transform.localScale;
}
moveChangeTime = _transitionTime;
moveStartTime = Time.time;
}
public void Kill ()
{
isMoving = false;
}
}
|