게임에서 사용하는 텍스처는 텍스트 가로 세로 사이즈를 2의 제곱으로 제작해야 함. 그래야 불필요한 추가 연산 없다고 함. 현실적으로 불가능하니까 여러 이미지 하나에 담아서 사용.
https://dbsckdqja75.tistory.com/39
Collider Type | Rigidbody 여부 | IsTrigger 여부 | 물리 충돌 | 이벤트 발생 |
---|---|---|---|---|
Static Collider | 없음 | 꺼짐 | 가능 | 없음 |
Trigger Collider | 없음 | 켜짐 | 없음 | 가능 (OnTrigger ) |
Dynamic Collider | 있음 | 꺼짐 | 가능 | 가능 (OnCollision ) |
Kinematic Collider | isKinematic 켜짐 | 꺼짐 또는 켜짐 | 없음 (수동 충돌만 가능) | 제한적 (Trigger만 가능) |
localScale을 반전시켰더니 혀가 반대로 가서
sprite만 반전시켜야될듯
else if (AttackAction.triggered)
{
// 클릭 당시 혀와 마우스의 위치를 설정하고 각도를 구한다.
mousePos = Camera.main.ScreenToWorldPoint(Mouse.current.position.ReadValue());
FlipCharacter();
tonguePos = tongue.position;
direction = mousePos - tonguePos;
direction.z = 0; // magnitude 왜곡 방지
targetLength = direction.magnitude;
angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
// Debug.Log("tongePos : " + tonguePos);
// Debug.Log("direction : " + direction);
// Debug.Log("targetLength : " + targetLength);
// 각도만큼 혀를 돌린다
tongue.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
isAttacking = true;
animator.SetBool("isAttacking", true);
arrivedPoint = false;
}
공격 했을 때 코드
private void FlipCharacter()
{
bool TrueIsLeft = (mousePos.x - tongue.position.x < 0) ? true : false;
// Debug.Log("mousePos x : " + mousePos.x);
// Debug.Log("tonuge.position.x : " + tongue.position.x);
// Debug.Log("TrueIsLeft : " + TrueIsLeft);
// Debug.Log("flipX : " + frogSR.flipX);
if (frogSR.flipX != TrueIsLeft)
{
if (TrueIsLeft)
{
Vector3 newPosition = tongue.position;
newPosition.x -= 0.2f;
tongue.position = newPosition;
}
else
{
Vector3 newPosition = tongue.position;
newPosition.x += 0.2f;
tongue.position = newPosition;
}
}
frogSR.flipX = TrueIsLeft;
}
개구리 좌우 반전 코드
중간에 mousePos 위치 때문에 초기화 안 된 상태로 계산에 참여해서 회전을 이상하게 하는 현상 있었는데 순서 바꿔서 해결
그냥 개구리 좌우 반전만 시키려면 한줄만 더 넣으면 되는데
혀 위치가 이상하길래 조정시키려다 코드가 마구 더러워짐
하지만 보이는 결과물은 더 나아졌다
private void ShrinkTongue()
{
if (tongueSR.size.x <= 0)
{
isAttacking = false;
animator.SetBool("isAttacking", false);
tongueSR.size = new Vector2(0, tongueSR.size.y);
tongueCollider.radius = 0f; // 콜라이더 크기 0으로 돌려놓기
tongueCollider.offset = new Vector2(0, 0);
return;
}
tongueSR.size = new Vector2(tongueSR.size.x - tongueSpeed * targetLength * Time.deltaTime, tongueSR.size.y);
tongueCollider.offset = new Vector2(tongueCollider.offset.x - tongueSpeed * targetLength * Time.deltaTime, 0);
}
콜라이더도 혀 늘릴때랑 똑같은 로직 사용.
공격 안 하면 콜라이더 크기는 0으로.
됐다.