일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Achievement unity
- 파이썬 웹 개발
- 데브런 #노코드게임제작 #데브런와디즈 #AI게임제작
- Python
- 슬라이싱
- 오프라인 환경
- sqlite3
- 파이썬
- #데브런 #노코드 #노코드게임제작 #데브런와디즈 #ai게임제작
- HTML
- 연산자
- django
- nodejs
- JavaScript
- 테이블 생성
- 파이썬 패키지 설치
- 상속
- 장고
- 모듈
- error
- 도과 테스트
- 회원가입
- Unity
- header
- 도전과제 unity
- 인덱싱
- 스팀 도과 Reset
- 스팀 도전과제 Reset
- 튜플 단일 요소
- Steam Achievement Reset
- Today
- Total
개발성문
Unity 또 하나의 충돌체크 Debug.DrawRay, Physics.Raycast 에 대해 본문
Unity 에서는 보통 충동 체크에 Collider,
Box, Sphere, Capsule 등을 주로 사용합니다.
Debug 는 게임을 개발하는 동안 쉽게 디버깅하기 위해 목적의 클래스입니다.
public static void DrawRay(Vector3 start, Vector3 dir, Color color = Color.white, float duration = 0.0f, bool depthTest = true);
DrawRay 는 색상과 함께 Start 지점부터 Start 지점 + dir(방향과 길이) 까지 선을 그리는 역할을 합니다.
Start는 시작 지점, dir은 Ray의 방향과 길이, Color 는 라인의 색상, duration 은 라인의 표시 시간, depthTest 는 라인이
카메라에서 가까운 오브젝트에 의해 숨겨진 경우에 라인을 숨길지의 여부를 나타냅니다.
우선, 이정도 설명에서 소스를 보도록 하죠.
private int speed = 10; private int rotateSpeed = 100; private int power = 7; private Transform swanPoint; public Transform bullet; private float raySpeed = 0; void Start () { swanPoint = transform.Find("SwanPoint"); } void Update () { Move(); Attack(); } private void Move() { float moveSpeed = speed * Time.deltaTime; float rMoveSpeed = rotateSpeed * Time.deltaTime; float keyVertical = Input.GetAxis("Vertical"); float keyHorizontal = Input.GetAxis("Horizontal"); transform.Translate(Vector3.forward * keyVertical * moveSpeed); transform.Rotate(Vector3.up * keyHorizontal * rMoveSpeed); } void Attack() { // 1. Debug.DrawRay(swanPoint.position, swanPoint.forward * 15, Color.red); }
위 소스에서 1번에 DrawRay 를 사용하고 있습니다.
swanPoint의 시작점 부터 정면 방향으로 15 만큼의 길이까지, 빨간색의 라인을 그리도록 되어있습니다.
위의 그림과 같이 빨간색 선이 그려졌네요.
이제 저 라인에 적 Object 가 닿을 경우에 미사일을 발사하도록 처리하겠습니다.
void Attack() { Debug.DrawRay(swanPoint.position, swanPoint.forward * 15, Color.red); // 2. RaycastHit hit; // 3. if (Physics.Raycast(swanPoint.position, swanPoint.forward, out hit, 15)) { // Debug - 1 Debug.Log(hit.collider.name + "1"); // 4. if(hit.collider.name == "Enemy"){ // Debug - 2 Debug.Log(hit.collider.name + "2"); Transform obj = Instantiate(bullet, swanPoint.position, swanPoint.rotation); obj.GetComponent
().velocity = swanPoint.forward * power; } } }
RaycastHit 는 Raycast에서 정보를 다시 얻는데 사용합니다.
그림을 클릭하면 할 수 있습니다.
Debug -1 , Debug -2 의 로그를 한번 확인해보겠습니다.
Enemy1 과 Enemy2 가 일정하게 찍히는 걸 확인 할 수 있습니다.
반면 Bullet1 은 찍히는 숫자가 크게 차이가 나는데, 처음에는 원인을 알 수 없었습니다.
하지만 잘 생각해보면 간단한 문제였죠.
미사일이 생성되서 발사되는데 Ray 광선 상에서 광성의 maxDistance 까지 이동 되기때문에 그 사이에 호출되는 것입니다.
이번 포스팅은 여기서 마치겠습니다.
'공부 좀 하자 > Unity' 카테고리의 다른 글
Unity 터치 포인트 좌표에 바운스 볼 생성 (2) - Touch (0) | 2018.04.04 |
---|---|
탱크(Tank)로 실험한 회전, euler, Mathf.Clamp (0) | 2018.04.03 |
Unity 스카이 박스(Sky Box) 에 대하여 (0) | 2018.03.30 |
Unity 터레인 엔진(Terrain Engine) 사용 (0) | 2018.03.30 |
Unity Time.deltaTime 과 Time.smoothDeltaTime 에 대하여 (0) | 2018.03.29 |