using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Model_AI_Default : MonoBehaviour {
float m_fSpeed = 1f;
bool isTarget = false;
GameObject m_Target_Obj = null;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (!isTarget) {
if (FindNeedTarget ("Player"))
isTarget = true;
else
isTarget = false;
} else {
GameObject CollMgr = GetCollisionCom ();
bool isColl = CollMgr.GetComponent<CollisionComponent> ().Collision_Sphere (m_Target_Obj.transform.position, transform.position, 0.5f, 0.5f);
if(isColl)
FollowTarget ();
}
// 걍 이렇게 써도 무방하다.
// if (FindNeedTarget ("Player"))
// FollowTarget ();
}
protected bool FindNeedTarget(string szTag)
{
// Target들을 찾는다
GameObject[] Target_Arr = GameObject.FindGameObjectsWithTag (szTag);
//Debug.Log (Target_Arr.Length);
if (Target_Arr.Length == 0)
return false;
int iTargetNum = 0;
float fDist_Ori = 0f;
// 가장 가까운 target를 찾는다.
for (int i = 0; i < Target_Arr.Length; ++i) {
Vector3 vDist = Target_Arr [i].transform.position - transform.position;
float fDist_New = vDist.magnitude;
if (i == 0) {
iTargetNum = i;
fDist_Ori = fDist_New;
} else {
if (fDist_Ori > fDist_New) {
iTargetNum = i;
fDist_Ori = fDist_New;
}
}
}
m_Target_Obj = Target_Arr [iTargetNum];
return true;
}
protected void FollowTarget()//target이 있으면 따라간다.
{
if (m_Target_Obj != null) {
Vector3 vDir = m_Target_Obj.transform.position - transform.position;
vDir = vDir.normalized;
transform.Translate (vDir * m_fSpeed * Time.deltaTime, Space.World);
}
}
protected GameObject GetCollisionCom()
{
return GameObject.Find ("ComponentMgr");
}
}
'프로그래밍 > Unity' 카테고리의 다른 글
코루틴 사용법 (0) | 2018.05.14 |
---|---|
Unity Google 연동 (0) | 2017.11.13 |
UI가 캐릭터를 따라가야할때 좌표 변환법 (0) | 2017.10.26 |
Scene의 모든 오브젝트 가져오는 법 (0) | 2017.09.18 |
Unity 기본 Input Movement (0) | 2017.09.18 |