forked from NewbbX2/AR_Airhockey
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHockeyStickInf.CS
179 lines (137 loc) · 5.73 KB
/
HockeyStickInf.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
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
///수정작업중.
using System.Collections;
using System.Collections.Generic;
using System;
using UnityEngine;
using UnityEngine.UI;
public class HockeyStickInf : MonoBehaviour
{
//유저번호
public int HockeyStickUserNo = 0;
//스틱오브젝트 셀프
GameObject HockeyStickObjectSelf;
//조작중인지여부
public bool isKeepTouching = false;
//스틱 이동방향
public Vector3 NormalizedStickMoveMent = new Vector3(0, 0, 0);
//스틱스피드
public float StickSpeed = 0;
//보드 오브젝트
GameObject hockeyBoard;
//시작세팅
void Start()
{
hockeyBoard = GameObject.Find("HockeyBoard");
HockeyStickObjectSelf = GameObject.FindGameObjectsWithTag("HockeyStick")[HockeyStickUserNo];
}
//업데이트
void Update()
{
stickCannotMoveThere();
calculateSitckSpeedAndDirec();
getControllerMovement();
}
//매 업데이트마다 스틱의 속도 및 방향 계산.
//컨트롤러 비작동중인경우만 여기서 체크.
//동작중일시 컨트롤러값으로 이미 연산완료.
void calculateSitckSpeedAndDirec()
{
//스틱 조작후 속도 빛 방향
if (isKeepTouching)
{
}
//일단 고정된 스틱인경우의 공이 부딫칠때, 공의 이동방향 및 속도.
else
{
StickSpeed = GameObject.Find("HockeyBall").GetComponent<BallInforAndMove>().BallMoveMent.magnitude;
NormalizedStickMoveMent = GameObject.Find("HockeyBall").GetComponent<BallInforAndMove>().BallMoveMent.normalized;
NormalizedStickMoveMent.z *= -1;
}
}
//스틱 이동불가 지역 판정
void stickCannotMoveThere()
{
//짝수팀(아래)가
if (HockeyStickUserNo % 2 == 0)
{
//공위치:테이블 절반이상일시.
if (HockeyStickObjectSelf.transform.position.z > 0)
{
HockeyStickObjectSelf.transform.position = new Vector3(HockeyStickObjectSelf.transform.position.x, HockeyStickObjectSelf.transform.position.y, 0);
}
//공위치:테이블 아래일시
//공위치:테이블위일시.
else if (HockeyStickObjectSelf.transform.position.z < hockeyBoard.transform.localScale.z)
{
HockeyStickObjectSelf.transform.position = new Vector3(HockeyStickObjectSelf.transform.position.x, HockeyStickObjectSelf.transform.position.y, -hockeyBoard.transform.localScale.z / 2);
}
}
//홀수팀(위)가
else if (HockeyStickUserNo % 2 == 1)
{
//공위치:테이블 절반아래일떄
if (HockeyStickObjectSelf.transform.position.z < 0)
{
HockeyStickObjectSelf.transform.position = new Vector3(HockeyStickObjectSelf.transform.position.x, HockeyStickObjectSelf.transform.position.y, 0);
}
//공위치:테이블위일시.
else if (HockeyStickObjectSelf.transform.position.z > hockeyBoard.transform.localScale.z)
{
HockeyStickObjectSelf.transform.position = new Vector3(HockeyStickObjectSelf.transform.position.x, HockeyStickObjectSelf.transform.position.y, hockeyBoard.transform.localScale.z / 2);
}
}
//좌우로 벗어난 경우, 테이블 끝으로 가져옴.
//벽이 어떤식인지 몰라서 일단 좌우로 나눔.
if (HockeyStickObjectSelf.transform.position.x > hockeyBoard.transform.localScale.x / 2)
{
HockeyStickObjectSelf.transform.position = new Vector3(hockeyBoard.transform.localScale.x / 2, HockeyStickObjectSelf.transform.position.y, HockeyStickObjectSelf.transform.position.z);
}
else if (HockeyStickObjectSelf.transform.position.x < -hockeyBoard.transform.localScale.x / 2)
{
HockeyStickObjectSelf.transform.position = new Vector3(hockeyBoard.transform.localScale.x / 2, HockeyStickObjectSelf.transform.position.y, HockeyStickObjectSelf.transform.position.z);
}
}
public int Controller_Type_touch_0_mouse_1_keyboard_2_pad_3 = 1;
//컨트롤러 타입에 따라 입력을 받아옴.
void getControllerMovement()
{
if (Controller_Type_touch_0_mouse_1_keyboard_2_pad_3 == 0)
{
}
else if (Controller_Type_touch_0_mouse_1_keyboard_2_pad_3 == 1)
{
if(Input.GetMouseButtonDown(0))
{
Vector3 Vec=new Vector3(Input.GetAxis("Mouse X"),0,0);
GameObject.Find("Controller").GetComponent<HockeyStickControl>().SetText(Input.GetAxis("Mouse X")+""+ Input.GetAxis("Mouse Y"));
CalculateMoveStickOrNotByController(Vec);
}
else
{
isKeepTouching = false;
}
}
}
//컨트롤러 동작으로 스틱 이동여부 판정
public void CalculateMoveStickOrNotByController(Vector3 controllerMoveVec)
{
if (controllerMoveVec.magnitude == 0)
{
isKeepTouching = false;
}
else
{
isKeepTouching = true;
MoveHockeyStickByControllerMove(controllerMoveVec* coefficientBetween_Controller_Stick);
}
}
//컨트롤러로 지정한 이동함을 저정하고, 실제로 좌표이동.
void MoveHockeyStickByControllerMove(Vector3 controllermoveVec)
{
NormalizedStickMoveMent = controllermoveVec.normalized;
StickSpeed = controllermoveVec.magnitude * coefficientBetween_Stick_Ball;
HockeyStickObjectSelf.transform.position += controllermoveVec;
}
float coefficientBetween_Controller_Stick = 10;
float coefficientBetween_Stick_Ball = 0.1f;
}