본문 바로가기

스크립트

(24)
2016/8/24 개발노트 어떤 객체의 자식들만 검색하고 싶을때transform.FindChild("")를 이용하면 된다. 괜히 모든 객체를 검색하지 않아도 찾을수 있다. 그리고 오늘은 오랜만에 세바스찬의 길찾기 알고리즘을 만들어 보았다.역시 세바스찬의 강의는 들을때마다 항상 감동인거 같다. A*알고리즘이라고 불리우는데 알고리즘의 문외한으로써 처음 봤을때 참 멋지다고 느꼈다.알고리즘의 원리는 아주 간단하다. 위의 그리과 같이 seeker의 위치와 target의 위치를 이용해서 가장 짧은 길을 찾는것이다.의외로 단순한것이지만, 이것을 코드로 구현해내는것은 쉽지 않을것이다. 코드는 다음과 같다. Grid2D.csusing UnityEngine;using System.Collections;using System.Collections.G..
[게임수학] 역탄도계산을 이용한 두점 사의 포물선 구하기 게임을 만들다보면 가장 큰벽으로 느껴지는것은 바로!! 이미지!!나는 프로그래머니까 항상 이미지때문에 골치가 아프다.하지만 이미지나 그래픽관련 문제가 아니라 단순히 내가 프로그래머로써 자괴감과 포기하고싶은 맘을 느끼게 해주는 것은 바로 수학이다. 아주 단순한 계기로 포물선구하기를 하게 되었다.같은 게임 개발자 친구들이 발매한 겜을 하면서 무기들을 날리는 장면에서 와~ 참 자연스럽게 날라간다~~ 라고 생각하고 있던중에(이 자연스럽게가 어쩌면 가장 구현하기 어렵다.)친구에게 연락이 되었고, 물어보면 아주 간단하게 말했다. "그거 그냥 간단하게 2차 방적식만 쓰면 돼....수학도 아니야..산수지 산수" 친구의 말을 듣고 바로 테스트에 돌입!!그리고 바로 좌절...근의공식도 모르겠고, 탄도학이나 역탄도 계산은 더..
2016/8/18 유니티 개발 노트 1. Start() vs Awake() 스타트와 어웨이크는 얼뜻보면 같아보인다.하지만 그 의미가 아주 다른다. 마치 스타트는 생성자처럼 보인다. 왜냐하면 기본적으로 생성되어 나오기때문에, 기존 프로그래머들은 아마도 아~ 스타트는 생성자랑 비슷한가 보다..라고 생각할것이다. 하지만 스타트는 전~혀 생성자 라고 말하기 힘들다.생성자라기 보다는 업데이트직전에 불려지는 업데이트의 문이라고 생각하시면 더 정확할것이다. 그럼 반면에 어웨이크는 기본적으로는 보이기 않기때문에 잘 모르는 개발자가 있을수도 있지만,어웨이크가 훨씬 생성자에 가깝다고 말할수 있다.말그대로 깨어나다 라는 뜻을 가진 어웨이크는 그 클라스가 어웨이크 할때 즉 생성될때 불려진다. 왜 스타트와 어웨이크가 중요한가하면 다음의 소스를 보면 이해하기 쉬울..
20. 유니티 교육 (Sebastian Lague 강의-2DRunner #2) Controller2D.cs using UnityEngine;using System.Collections; public class Controller2D : RaycastController { float maxClimbAngle = 80;float maxDescendingAngle = 75; public CollisionInfo collisions; [HideInInspector]public Vector2 playerInput; public override void Start(){base.Start ();collisions.faceDir = 1;} public void Move(Vector3 velocity, bool standingOnPlatform){Move (velocity, Vector2.zero..
19. 유니티 교육 (Sebastian Lague 강의-2DRunner #1) 1. 2D Platform을 만들어 보자 한2주를 공부하고 유니티로 2D겜을 만들라고 해보니까 아무래도 내맘 대로 잘 안됐다.왜 이렇게 어렵지? 라고 생각한후 다시 우리의 선상님 세바스찬의 강의를 보기로 했다. 딱 2개의 강의만 듣고 역시 난 코딩은 안하는게 낫다라는 자괴감이 들정도로 잘못된 길을 가고 있었고,세바스찬의 방식은 정말 멋지다고 느껴질정도로 깨끗하고 빈틈없는 코드을 보여주었다. 충돌체크를 단순히 유니티의 rigidBody를 이용하는게 아니라 조금더 정밀하게 따로 설정해주었다.수직과 수평으로 여러개의 레이저로 충돌체크하고,점프높이과 최고점 도달시간을 이용해서 중력과 점프속도를 계산하는 것이 너무 인상적이였다. 이번에도 수학의 힘은 위대하다라는 당연한 결과에 도달했다. 소스코드는 다음과 같다. ..
18. 유니티 교육 (Sebastian Lague 강의-3DShooter #5) 1. Particle Death Effect 적이 죽을때 그냥 띵! 하고 사라지면 재미있을까?엄청 별루 일것이다.밑의 그림처럼 파티클들이 분산하면서 없어진다면 엄청 멋있을거 같다.첨에는 뭔가 엄청난 코딩이 필요할줄 알았는데, 그냥 파티클 시스템을 이용하면 간단히 만들수 있다. 게임 오브젝트의 파티클시스템을 선택하고 인스펙터를 확인하면 다음과 같다. Renderer항목에서 모드는 메쉬, 메쉬는 큐브로 그리고 메터리얼은 적당한것으로 바꾼다.그리고 이 파티클들이 방해물이나 주위환경에 반응하기 위해서 Collision항목을 선택후World로 선택, 그리고 Collides With항목에서 바닥과 방해물만 레이어를 만든후 추가시켜준다.만약 everything을 선택하면 코스트가 높아질 우려가 있기때문에 필요한것들하..
17. 유니티 교육 (Sebastian Lague 강의-3DShooter #4) 1. Map Navigation 지난번까지는 타일도 만들고 방해물도 만들어 보았다.이제는 거의 맵의 형태를 가지고 있다고 할수 있다. 하지만 겉모습은 맵처럼 보이지만문제는 실제로 이 맵이 맵으로써 역활을 할수 있냐라는 것이다.맵으로써의 역활이란, 갈수 있는 곳과 가지 못하는 곳을 나누는 것이 가장 기본이라고 할수 있을것이다.만약 유니티나 게임 엔진을 이용하지 않는다면, 아마도 귀찮고 번거러운 작업이 될거라고 생각하지만,게임엔진들은 기본적으로 이런 기능을 제공한다. 지난시간에 사용해본 Navigation과 NavMeshAgent를 이용하면 쉽게 해결할수 있다. 지금까지 만든 맵위에 Quad를 하나 만들고 Box Collider를 삭제해준다.우리는 어짜피 Mesh Renderer를 이용해서 Navigatio..
16. 유니티 교육 (Sebastian Lague 강의-3DShooter #3) 1. Tile Map 오늘은 타일 맵을 만들어 보자.우선 타일이 될 Quad를 하나 준비한다. Quad는 얼핏보면 Plane과 비슷하지만 Quad는 한쪽 면만 보이기 때문에 코스트가 적다.아무튼 이 Quad를 Prefab으로 저장해 놓는다. 그리고 빈객체를 만들고 Map이라고 정한다. 이 Map객체에 MapGenerator스크립트는 넣어준다.스크립트 소스를 보자. MapGenerater.csusing UnityEngine;using System.Collections; public class MapGenerator : MonoBehaviour { //Prefab를 지정하기 위해서 Public으로 public Transform tilePrefab; //지도의 크기를 결정 public Vector2 mapSi..