타일맵
public class BreakableTile : MonoBehaviour
{
Tilemap tilemap;
public GameObject breakEffect;
private void Awake()
{
tilemap = GetComponent<Tilemap>();
}
public void HandleImpact(Vector3 ImpactPosition)
{
Debug.Log(tilemap.WorldToCell(ImpactPosition));
tilemap.SetTile(tilemap.WorldToCell(ImpactPosition), null);
Inst a ntiate(breakEffect, tilemap.CellToWorld(tilemap.WorldToCell(ImpactPosition)),Quaternion.identity);
}
}
총알 움직임
private void FixedUpdate()
{
Vector2 startPosition = rb.position;
Vector2 movement = (Vector2)transform.right * speed * Time.fixedDeltaTime;
Vector2 endPosition = startPosition + movement;
RaycastHit2D hit = Physics2D.BoxCast(col.bounds.center, col.bounds.size,0f,(Vector2)transform.right, movement.magnitude, mask);
if (hit.collider != null && hit.collider.CompareTag("Ground"))
{
if (hit.collider.TryGetComponent<BreakableTile>(out BreakableTile breakableTile))
{
Vector3 hitpoint = hit.point - (hit.normal*0.01f);
breakableTile.HandleImpact(hitpoint);
}
Destroy(gameObject);
}
else
{
rb.MovePosition(endPosition);
}
}
타일맵 콜라이더 + 컴포짓 콜라이더 ( 리지드바디 static )
총알 트리거 + 박스콜라이더 (리지드바디 Kinematic)
인 상태인데
시 발 어째서인지 모를이유로 오른쪽에서 좌측으로, 평지에서 쏘는 총알만 좌표계산을 제대로하지못하고있음
대체왜
하루죙일 좌표값 다른거주면서 해봐도 안되어서 박스캐스트까지 쓰는데도 안됨
미치겠슨
소리 녹음 같이 들어갔네 ㅋㅋ
한쪽면만 안되는거면 십중팔구 좌표문제임. 니가때리는 왼쪽타일은 타일맵에서는 그 한칸 옆쪽 혹은 한칸 위쪽을 인식해서그럼. -0.01 정도 더해봐
아 이미 예외처리 했구나
아 아니네 (hit.normal*0.01f)을 하면 너가 우측에서 좌로 때리는건 normal값이 1, 0 이되잖아. 그럼 0.01, 0 으로 되니깐 Y값은 제대로 못빼고 그래서 오류 생기는것같은데? 애초에 너가 경사면에 걸쳐서 때릴때는 문제없는거보면 y축 좌표 계산이 이상한것 같은데
@Indie1(122.40) 그냥 깡으로 Vector2.one * 0.01을 빼
@Indie1(122.40) 그럼 왼쪽에서 때릴때 한칸 밀려서 적용됨
@dd 그럼 예외처리를해. 나는 먼저때려보고 쌩으로 타일이 없으면 -0.01 해서 다시 해보고 그래도 없으면 그냥 패스하게 했음. 이건 유니티 타일맵이 이래가 어쩔수가 없음
@Indie1(122.40) 그냥 타일맵에서 컴포짓콜라이더 빼니까 되네, 얼탱 ㄱ-