[미해결] 위치 이동 질문 - 인디 게임 개발 갤러리 (dcinside.com)
이미 한번 올렸고 갤러가 답도 줬는데 결국 결과가 같음
증상은 링크랑 같음
어떤게 문제인걸까?
++
구성방식이랑 이런거 좀 바꿔서 현재 전체적인 코드는 아래와 같음
public class S1TimerTrigger : OBJManager
{
public GameObject s_Timer; // 타이머
public TextMeshProUGUI timertext; // 타이머 내용
public Transform TargetPos; // 강제 이동될 곳
[SerializeField]
BoxCollider2D box2d;
float S1TimerLeft = 10.0f;
bool isTimeOverCheck = false;
protected override void Start()
{
base.Start();
box2d = S1TimerTrigger.GetComponent<BoxCollider2D>();
}
void Update()
{
if(box2d.enabled == false)
{
StartCoroutine(ST1TimerCount());
}
if (isTimeOverCheck == true)
{
isTimeOverCheck = false;
Player1.transform.position = new Vector2(TargetPos.position.x, TargetPos.position.y);
}
}
IEnumerator ST1TimerCount()
{
if (S1TimerLeft > 0)
{
S1TimerLeft -= Time.deltaTime;
s_Timer.SetActive(true);
timertext.text = Mathf.Round(S1TimerLeft).ToString();
}
else if (S1TimerLeft <= 0)
{
s_Timer.SetActive(false);
isTimeOverCheck = true;
}
yield return null;
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("Player"))
{
box2d.enabled = false;
}
}
}
TimeOverCheck가 한번 true가 되면 다시 안꺼지지?
Update에서 true인 경우 캐릭터의 좌표를 계속 수정하고 있으니까 매 프레임마다 그 자리로 가겠지
ㄴㄴ 바로 false를 넣었음
일단 StartCoroutine은 Update문에서 쓰려면 한정된 조건에서 딱한번 돌아갈때만 쓰는거고, ST1TimoerCount()함수에서는 while문으로 카운팅해야됨
St1TimerCount() 함수에서 yeild return new WaitForSeconds(waitTime); isTimeOverCheck = true; 이렇게 놓고 OnTriggerEnter2D함수에 StartCorountine(ST1TimerCount());
Update문에서 if (isTimeOverCheck == false ){ S1TimerLeft -= Time.deltaTime; ...and Text출력 } else { isTimeOverCheck = false ; Player1.transform.positon ... } 이런식으로 하셈
그리고 니가 만약 NavMeshAgent 쓰고 있다면 포지션 변경할때 NavMesh끄고 포지션 변경해야됨 안그러면 버그걸려서 NavMesh 이후로 작동 안할수도 있음. 아니면 agent.Warp함수쓰던가
nevmash는 사용하지않음. while문으로 카운트 하라는게 조금 이해가 안가는게 while()안에 들어갈 조건이 뭐여야해? while timerleft>0으로 해서 타임 카운트 하는거? 해당 방식이면 for문 돌리는거나 차이없지않아?
코루틴이 자동으로 돌아가는게 아니라 안에서 루프를 돌게 해줘야 Update문처럼 돌아감. 니가 지금 쓴 코드는 한번 실행되고 끝임
그리고 position을 변경해도 캐릭터가 멈추는건지 아니면 조건문자체로 안들어가는건지 Debug.Log찍어서 확인해
좌우키로 flip 정도는 되는데 이동이 안됨