개인 과제 해설 풀이 1회차
팀원 TIL 공유
ex> A(2,4) - B(4,1) = X(-2,3)
VectorX 의 모습은 B가 A로 향하는 Vector와 같음
Player를 쫓는 몬스터의 Vector를 구할 때
Vector.Player - Vector.Monster = 플레이어에게 가는 몬스터 Vector
ex> Vector의 크기값에 따라 속도 조절 가능
크기는 다르지만 동일한 방향의 Vector Player,Monster가 있다면
VectorPlayer speed(5) - VectorMonster speed(2)
Player는 1초에 5의 크기 만큼 이동
Monster는 1초에 2의 크기 만큼 이동
Monster가 Player를 잡을 수 없음
그래서, Unity에서는 normalized를 활용하여 "정규화" 시킴
방향이 아닌 크기값만 1로 고정시켜 일정한 속도가 나오도록 만듦
public class PlayerController : MonoBehaviour
{
public float speed;
// Unity에서 speed값 조절
SpriteRenderer spriteRenderer;
void Start()
{
spriteRenderer = GetComponentInChildren<SpriteRenderer>();
}
void Update()
{
// 입력에 따라 이동
transform.position +=
(new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"))).normalized
* speed * Time.deltaTime;
// Time.deltaTime : 시간당 프레임 균일화
Vector3 mousePos = Input.mousePosition;
// Vector3가 마우스의 포지션이라고 선언
spriteRenderer.flipX = (mousePos.x < Screen.width/2);
// 마우스포지션이 스크린의 너비의 반보다 작다면 X축을 기준으로 접혀라
}
}
public class MoveManager : MonoBehaviour
{
SpriteRenderer spriteRenderer;
[SerializeField] private float speed;
void Start()
{
spriteRenderer = GetComponentInChildren<SpriteRenderer>();
}
void Update()
{
float vertical = Input.GetAxisRaw("Vertical");
float horizontal = Input.GetAxisRaw("Horizontal");
Vector2 direction = new Vector2(horizontal, vertical);
direction = direction.normalized;
if (horizontal > 0)
{
spriteRenderer.flipX = true;
}
else if (horizontal < 0)
{
spriteRenderer.flipX = false;
}
else
{
return;
}
}
}
- if 문에 내용이 1줄만 있다면 { } 를 생략할 수 있는 점을 몰라서 스크립트가 길어짐
- 굳이 조건을 걸어 나누지 않아도 되는 부분도 나누게 되어 코드가 길어짐
Input System을 활용하지 않고 스크립트를 활용하여 움직임을 구현하는 부분에선 동일했지만
보다 간편하게 제작 가능한 부분이 있었음에도 활용하지 못한 점이 아쉬움