-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathKeyboardMovement.cs
More file actions
136 lines (113 loc) · 3.5 KB
/
KeyboardMovement.cs
File metadata and controls
136 lines (113 loc) · 3.5 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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
public class KeyboardMovement : MonoBehaviour
{
public float mouseSpeed = 2f;
public float defaultSpeed = 5f;
[SerializeField, Range(5f, 100f)]
public float maxSpeed = 30f;
public float alphaFactor = 0.002f;
public bool activate = false;
public Foveate cameraL;
public Foveate cameraR;
//private Rigidbody rb;
private float currentSpeed = 0f;
private float acceleration = 0f;
private bool isAutoMove = false;
private CharacterController cc;
// Start is called before the first frame update
void Start()
{
cc = GetComponent<CharacterController>();
currentSpeed = defaultSpeed;
updateFoveationAlpha();
}
private void updateFoveationAlpha()
{
cameraL.foveationAlpha = currentSpeed * alphaFactor;
cameraR.foveationAlpha = currentSpeed * alphaFactor;
//Debug.Log("current alpha:" + cameraL.foveationAlpha);
}
private void updateSpeed()
{
// speed state
currentSpeed += acceleration * Time.deltaTime;
//Debug.Log("current speed: " + currentSpeed);
if (currentSpeed > maxSpeed)
{
currentSpeed = maxSpeed;
}
if (currentSpeed < defaultSpeed)
{
currentSpeed = defaultSpeed;
}
}
//update acceleration by pressing shift/control
private void updateAcceleration()
{
// change acceleration
if (Input.GetKey(KeyCode.LeftShift))
{
acceleration = 1f;
}
if (Input.GetKey(KeyCode.LeftControl))
{
acceleration = -1f;
}
if (Input.GetKeyUp(KeyCode.LeftShift) || Input.GetKeyUp(KeyCode.LeftControl))
{
acceleration = 0f;
}
}
// Update is called once per frame
void FixedUpdate()
{
if (activate)
{
//mouse movement
if (Input.GetMouseButton(1))
{
transform.Rotate(0, Input.GetAxis("Mouse X") * mouseSpeed, 0);
}
if (Input.GetKeyDown(KeyCode.Space))
{
isAutoMove = !isAutoMove;
}
updateSpeed();
//auto-move
if (isAutoMove)
{
cc.Move(currentSpeed * Time.deltaTime * -transform.forward);
}
// move by WASD
else
{
if (Input.GetKey(KeyCode.W))
{
cc.Move(-transform.forward * currentSpeed * Time.deltaTime);
}
else if (Input.GetKey(KeyCode.S))
{
cc.Move(transform.forward * currentSpeed * Time.deltaTime);
}
else if (Input.GetKey(KeyCode.A))
{
cc.Move(transform.right * currentSpeed * Time.deltaTime);
}
else if (Input.GetKey(KeyCode.D))
{
cc.Move(-transform.right * currentSpeed * Time.deltaTime);
}
else
{
acceleration = 0f;
cc.Move(Vector3.zero);
}
}
updateAcceleration();
updateFoveationAlpha();
}
}
}