forked from rezzad/lastmosquito
-
Notifications
You must be signed in to change notification settings - Fork 1
/
FrogCtrl.cs
140 lines (101 loc) · 4.53 KB
/
FrogCtrl.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
using UnityEngine;
using System.Collections;
public class FrogCtrl : MonoBehaviour
{
Animator anim;
public PlayerCtrl _Player;
//private GameObject _Cube;
private GameObject _Tongue;
private Transform _TongueTr;
//private float x;
private Transform tr;
private RaycastHit hit;
private float fLength;
//private bool bCheck;
private bool isInSight;
//private bool bSwallow;
private Vector3 vTongueDir;
// Use this for initialization
void Awake()
{
_Player = GameObject.Find("Player").GetComponent<PlayerCtrl>(); //PlayerCtrl.Instance;//
tr = GetComponent<Transform>();
//temp
//_Cube = GameObject.Find("Cube");
_TongueTr = tr.transform.FindChild("Tongue"); // 자식으로 가진 Tongue의 Transform을 가져오기 위해 사용
_Tongue = _TongueTr.gameObject; //
//_Tongue = GameObject.Find("Tongue");
// x = 0f;
fLength = 6f;
//bCheck = false;
isInSight = false;
// bSwallow = false;
vTongueDir = Vector3.zero;
// fPlayerOwnSpeed = _Player.fOwnSpeed; // 플레이어 초기화 이후에 실행되어야 한다 - 혹시나 해서 Start로 뺌
anim = GetComponent<Animator>();
anim.Play("idle");
////
}
void Start()
{
}
// Update is called once per frame
void Update()
{ //xecution Order를 변경했기 때문에 Player 이후에 호출됨
// isInSight = Check_Sight();
isInSight = CollisionManager.Instance.Check_Sight(tr, _Player.transform.position, fLength, 40f);
if (isInSight)
{
vTongueDir = (_Player.transform.position + _Player.transform.forward) - _Tongue.transform.position; // 방향벡터 구하기
vTongueDir.Normalize(); // 정규화
}
// Debug.DrawRay(tr.position, tr.forward * 200f, Color.blue);
Vector3 vTemp = (_Player.transform.position - tr.position);
vTemp.Normalize();
//Debug.DrawRay(tr.position, vTemp * fLength, Color.yellow);
if (isInSight)
{
_Tongue.SendMessage("SetMoveState", true, SendMessageOptions.DontRequireReceiver);
_Tongue.SendMessage("SetDir", vTongueDir, SendMessageOptions.DontRequireReceiver);
}
/*
Debug.Log("(Update) - x : " + vTongueDir.x.ToString() +
"y : " + vTongueDir.y.ToString() +
"z : " + vTongueDir.z.ToString());*/
}
void LateUpdate()
{
}
private bool Check_Sight()
{
// Debug.Log("_Player.position : " + _Player.transform.position.x.ToString() + ", " + _Player.transform.position.y.ToString() + ", " + _Player.transform.position.z.ToString());
// Debug.Log("tr.position : " + tr.position.x.ToString() + ", " + tr.position.y.ToString() + ", " + tr.position.z.ToString());
Vector3 vDir = _Player.transform.position - tr.position; // 플레이어
// print("vDir Length = " + Vector3.Distance(_Player.transform.position, tr.position).ToString());
vDir.Normalize();
// if (Physics.Raycast(_Obj.transform.position, _Obj.transform.forward, out hit, _fDist))
// if( hit.collider.tag == _Tag)
//Debug.Log("Angle : " + Vector3.Angle(tr.forward , vDir).ToString());
Debug.DrawRay(tr.position, vDir * fLength, Color.blue);
if ((Vector3.Angle(tr.forward, vDir) < 40) && Physics.Raycast(tr.position, vDir, out hit, fLength)) // 범위안에 들어와 있으면서, 각도가 40보다 작다
{
//Debug.Log("들어옴");
// if (false == bCheck)
// {
// bCheck = true;
if (hit.collider.tag == "PLAYER")
{
vTongueDir = (_Player.transform.position + _Player.transform.forward) // * _Player.fOwnSpeed * Time.deltaTime
- _Tongue.transform.position; // 방향벡터 구하기 - 플레이어의 다음 위치의 방향에
//
vTongueDir.Normalize(); // 정규화
// _Tongue.transform.rotation = Quaternion.Euler(vDir);
//}
return true;
}
}
// bCheck = false;
// Debug.Log("안들어옴");
return false;
}
}