스크립트 특징
4. slingshot
마우스 입력상태 표시
- 마우스의 입력상태를 표현할 때, 해당 맴버변수(isMouseDown)을
사용하면 마우스 입력 상태를 명확히 관리 할 수 있음.(에러가 덜생김)
// 마우스가 눌려 있는지 확인
// 마우스의 입력상태를 표현할때,해당 맴버변수(isMouseDown)를 사용하면
// 마우스 입력 상태를 명확히 관리할 수 있음.(에러가 덜생김)
private bool isMouseDown;
라인 랜더러 표시
- 직선인 라인 랜더러를 표현하고 싶으면 배열뒤에 " .positionCount = 2 " 를 붙여야 함
(직선이 되려면 점의 개수가 2개가 되어야 하기 때문에)
// LineRenderers 배열의 lineRenderer 객체의 점 개수를 2로 설정
// 직선이 되려면 점의 개수가 2개가 되어야함. 따라서 각 배열에 positionCount = 2 을 작성.
lineRenderers[0].positionCount = 2;
lineRenderers[1].positionCount = 2;
컴포넌트 비활성화
오브젝트의 컴포넌트를 활성화 시키고 싶으면 변수뒤에 " .enabled = true",
비활성화 시키고 싶으면 ".enabled = false" 를 사용
(현재 스크립트에서는 콜라이더 컴포넌트를 비활성화 시키기 위해 사용됬음)
// 몬스터가 생성될때, 충돌효과 비활성화
MonsterCollider.enabled = false;
마우스 좌표변환
마우스의 현재 화면 좌표를 3D 공간에서의 위치로 변환하고 싶으면
Vector3 변수이름 = Input.mousePosition; 사용.
(추가적으로 마우스 좌표를 3D 월드 좌표로 변환하려면 z 값이 필요함)
// Input.mousePosition은 화면 상의 마우스 위치를 픽셀 단위로 반환. 이 값은 (x, y) 좌표로 주어지며, z 값은 화면 깊이를 나타냄
// **마우스의 현재 화면 좌표를 3D 공간에서의 위치로 변환하고 싶으면
Vector3 mousePosition = Input.mousePosition;
// 마우스 좌표를 3D 월드 좌표로 변환하려면 z 값이 필요함.
// 카메라와의 거리를 설정하여 2D -> 3D 공간으로 변환할 때, 정확한 위치를 얻도록 함.
// 현 씬에서는 z값을 10f 로 설정하면, 고무줄을 이리저리 당겨봐도 생성된 프리팹이 뒤집히지 않고 일정한 모양을 유지함.
mousePosition.z = 10f;
2D -> 3D 좌표계 변환
2D 에서 3D 좌표계로 변환하고 싶으면
변수이름 = Camera.main.ScreenToWorldPoint(매개 변수); 사용.
// 2D -> 3D좌표계로 변환.
// 화면 상의 mousePosition를 월드 공간에서의 위치로 변환하여 currentPosition에 저장
// ***해당 코드를 사용함으로서, 슬링샷의 고무줄의 끝점(고무줄의 자유롭게 움직이는 끝 부분) 위치를 제어할 수 있게 됨.
currentPosition = Camera.main.ScreenToWorldPoint(mousePosition);
백터의 크기 제한
벡터의 크기(길이)를 제한하면서 벡터의 방향은 그대로 유지하고 싶을땐
Vector3.ClampMagnitude(Vector3, maxLength) 사용
// Vector3.ClampMagnitude 는,벡터의 크기(길이)를 제한하면서 벡터의 방향은 그대로 유지하도록 하는 함수
// currentPosition - slingshotcenter.position은 슬링샷의 중심에서 마우스까지의 벡터를 계산
// Vector3.ClampMagnitude로 그 거리를 제한
// 거리가 제한된 벡터가 슬링샷의 중심 위치(slingshotcenter.position)에서 시작
currentPosition = slingshotcenter.position + Vector3.ClampMagnitude(currentPosition -
slingshotcenter.position, maxLength);
백터의 움직임 제한
3D 공간상에서 어떤 위치나 움직임을 제어할 때, 또는 특정 영역 안에서만 움직이도록 하고 싶을 때
Vector3 ClampBoundary(Vector3 vector) 함수를 사용
(끝에 return vector; 를 작성하지 않으면, ClampBoundary 함수가 정상적으로 작동되지 않음)
// 고무줄을 특정 범위에서만 당길 수 있게 설정
// Vector3 는 3D공간에서의 월드좌표
Vector3 ClampBoundary(Vector3 vector)
{
// vector.y 값을 bottomBoundary와 1000 사이로 제한
vector.y = Mathf.Clamp(vector.y, bottomBoundary, 1000);
// vector를 반환
// ** 해당 코드를 작성해야 ClampBoundary 함수가 정상적으로 실행됨
return vector;
}
}
즉각적인 백터의 속도 구현
".Velocity" 를 사용하면 즉각적인 움직을 구현할 수 있음.
(Add Force()는 물체의 질량에 따라 가속도가 붙어서 속도가 달라지지만, .velocity는 물체의 속도가 변하지 않음)
// 계산된 힘을 Monster 객체에 적용하여 "속도" 를 설정.
// .Velocity 를 사용하면 즉각적인 움직을 구현할 수 있음.
// (Add Force()는 물체의 질량에 따라 가속도가 붙어서 속도가 달라지지만, .velocity는 물체의 속도가 변하지 않음
Monster.velocity = MonsterForce;
null로 몬스터 정보 초기화
다음에 새로운 몬스터를 발사할 때(사용할 때), 이전에 사용한 몬스터랑
충돌하지 않게 하기 위해 정보를 null 로 초기화함
초기화를 하면 다음에 생성될 몬스터의 상태를 안전하게 보장시킴(오류발생을 줄임)
// 이미 날아간 몬스터의 정보를 null 로 초기화함으로서
// 음에 생성될 몬스터의 상태를 안전하게 보장시킴(오류발생을 줄임)
Monster = null;
MonsterCollider = null;
'게임 개발(유니티) > 멋쟁이 사자처럼 3기_회고록' 카테고리의 다른 글
| [멋쟁이사자처럼 유니티 TIL] 2024_12_30~31 강의 요약 및 정리(1)_(TetrisManager 스크립트 동봉) (0) | 2025.01.03 |
|---|---|
| [멋쟁이사자처럼 유니티 TIL] 2024_12_30~31 강의 요약 및 정리(0) (0) | 2025.01.02 |
| 멋쟁이 사자처럼 과제1_앵그리버드류 게임 제작(2) (0) | 2024.12.26 |
| 멋쟁이 사자처럼 과제1_앵그리버드류 게임 제작(1) (0) | 2024.12.25 |
| [멋쟁이사자처럼 유니티 TIL] 2024_12_19(목) 강의 요약 및 정리(0) (0) | 2024.12.19 |