-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathInterfaceSample.cs
118 lines (101 loc) · 2.59 KB
/
InterfaceSample.cs
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
/* IController.cs file */
namespace MyGame
{
public interface IController
{
event System.Action OnStart;
event System.Action OnStop;
}
}
/* PlayerController.cs file */
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MyGame
{
public class PlayerController : MonoBehaviour, IController
{
public event Action OnStart;
public event Action OnStop;
private bool _isTouched = false;
private void Update()
{
#if UNITY_EDITOR
if (Input.GetMouseButtonDown(0))
{
OnStart?.Invoke();
}
if (Input.GetMouseButtonUp(0))
{
OnStop?.Invoke();
}
return;
#endif
if (Input.touches.Length > 0)
{
if (!_isTouched)
{
_isTouched = true;
OnStart?.Invoke();
}
}
else
{
if (_isTouched)
{
_isTouched = false;
OnStop?.Invoke();
}
}
}
}
}
/* Player.cs file */
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MyGame
{
public class Player : MonoBehaviour
{
[SerializeField] private Rigidbody _rigidbody;
[SerializeField] private GameObject _controlObject;
[SerializeField] private float _speedMax;
private float speed = 0;
public IController _controller;
private bool _isControled = false;
private Quaternion _defaultRotation;
private RigidbodyConstraints _constraints;
public bool IsControled
{
get => _isControled;
set => _isControled = value;
}
// Start is called before the first frame update
void Start()
{
_constraints = _rigidbody.constraints;
_defaultRotation = transform.rotation;
_controller = _controlObject.GetComponent<IController>();
_controller.OnStart += StartMovement;
_controller.OnStop += StopMovement;
}
private void StopMovement()
{
speed = 0;
}
private void StartMovement()
{
speed = _speedMax;
}
// Update is called once per frame
void Update()
{
if (_isControled)
{
_rigidbody.velocity = Vector3.forward * speed;
}
}
}
}