아래와 같은 방법들로 콜라이더 터널링 현상을 최소화하는 방법들이 있습니다. Collision Detection 모드 변경: Rigidbody의 Collision Detection 모드를 Continuous Dynamic으로 설정해보세요. 이 모드는 연속 충돌 감지를 활성화하여 터널링을 감소시킬 수 있습니다. 그러나 이 모드는 연산 비용이 높아질 수 있으므로...
제가 플레이어에 캡슐콜라이더 컴포넌트 추가하고 wall오브젝트에 box콜라이더 추가한다음에 rigidbody설정에 collision Detection도 Continuous로 해줬는데도 플레이어가 벽에 가서 비비적대면 천천히 뚫어버리는 상황이 발생하는데 해결법이 있을까요 플레이어 이동방법으론 transform.position을 증가시키는 방법으로 하였습니다. 이유를 좀 알아보니까 속도가 빨라서 그런거 같은데 이게 해결방법이 없을까요? Player 스크립트 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { public float speed; float hAxis; float vAxis; bool wDown; Vector3 moveVec; Animator anim; // Start is called before the first frame update void Awake() { anim = GetComponentInChildren<Animator>(); } // Update is called once per frame void Update() { hAxis = Input.GetAxisRaw("Horizontal"); vAxis = Input.GetAxisRaw("Vertical"); wDown = Input.GetButton("Walk"); moveVec = new Vector3(hAxis, 0, vAxis).normalized; transform.position += moveVec*speed*Time.deltaTime; transform.position += anim.SetBool("isRun", moveVec != Vector3.zero); anim.SetBool("isWalk", wDown); } }
유니티에서는 충돌 감지와 처리를 위해 물리 엔진을 사용합니다. transform.position을 직접 수정하면 물리 엔진을 우회해서 움직이게 됩니다. 이 경우, 충돌이 제대로 처리되지 않을 수 있습니다. 게임 오브젝트를 물리 엔진을 통해 움직이려면 Rigidbody 컴포넌트의 메서드를 사용해야 합니다. Rigidbody의 velocity 속성을 수정하...
Esprite.color = new Color(1f, 0f, 0f, 1f); 코드는 캐릭터의 스프라이트 색상을 빨강으로 바꾸는 코드입니다. 그러나 만약 스프라이트에 적용된 텍스처가 색상 변경을 지원하지 않는다면 코드가 작동하지 않을 수 있습니다. 예를 들어, 스프라이트의 텍스처가 흑백 또는 알파 채널만 가진 텍스처인 경우 색상 변경이 제대로 적...
플레이어가 가로등 빛에 닿으면 몬스터가 이동속도가 빨라지게 하려하거든요 그래서 가로등 빛에 서클콜라이더 컴포넌트 추가하고 트리거 체크한다음 태그 light로 바꿔줬어요. 여기서 생각해서 코드 private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.tag == "Enemy")//이건 적이랑 부딪혔을때 경우입니다 { GetDamage(collision.gameObject); } else if(collision.gameObject.tag =="light") { EnemyController enemyspeed=GetComponent(); enemyspeed.speed *= 12; } } private void OnCollisionExit2D(Collision2D collision) { if (collision.gameObject.tag == "light") { EnemyController enemyController = collision.gameObject.GetComponent(); enemyController.RestoreSpeed(); // speed를 원상 복구하는 메서드 호출 } } 이렇게 짰고 enemy컨트롤러엔 enemy스크립트에 private float originalSpeed; public void RestoreSpeed() { speed = originalSpeed; // speed 값을 원상 복구 } 이거 추가했거든요 콜리션에 닿아도 몬스터가 안빨라지는데 이유가 있을까요
230
2
0
데브게므·2023-06-11
onCollisionEnter2D 와 onCollisionExit2D 메소드는 충돌할 때만 호출됩니다. 가로등 빛은 일반적으로 물리적으로 "충돌"하지 않기 때문에, 대신 OnTriggerEnter2D와 OnTriggerExit2D 메소드를 사용해야 합니다. 관련해서 가로등 빛의 Collider 설정에 Trigger가 켜져 있는지 확인해보시기 바랍니다.