반응형
SMALL
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 2f;
public GameObject gun;
public void Init()
{
}
void Update()
{
var dirX = Input.GetAxisRaw("Horizontal");
var dirY = Input.GetAxisRaw("Vertical");
Vector2 dir = new Vector2(dirX,dirY);
this.transform.Translate(dir.normalized* speed*Time.deltaTime);
if (Input.GetMouseButton(0))
{
Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 dirVector = mousePos - (Vector2)this.gun.transform.position;
this.gun.transform.right = dirVector.normalized;
}
}
}
마우스 포지션을 총기 포지션을 바꾸는 건 생각보다 단순하게 구현할수 있었는데 그 방법은 아래와 같다.
1. Vector2 타입의 변수에 ScreenToWorldPoint 함수를 이용해 스크린포 지션의 정보를 월드 좌표상의 마우스 포지션으로 변환하여을 할당해준다.
2. 총이 바라볼 방향은 위의 마우스 포지션 값에서 총기 오브젝트의 포지션 값에서 총의 포지션 값을 vector2로 변한다.
3. 총구의 방향은 스프라이트 기준으로 오른쪽이기 때문에 transform.right의 값에 방금 만들어준 방향을 정규화하여 할당해주면 총기의 정규화된 transform.right값은 해당 방향을 바라보게 된다.
조금 헷갈릴수 있는데 정리하면
- transform.right : 해당오브젝트의 월드 좌표상에서 x축의 방향벡터를 뜻한다. (up이면 y축, forward면 z축 (2d에서는 보이지 않는다))
- 해당 값은 정규화된 벡터값으로 크기가 1로 고정되어있다.
- 오브젝트의 중심점(transform.position)값에서 마우스를 바라보는 방향을 구해 정규화한뒤. 해당 값에 transform.right 을 넣어준것이 핵심이다.
이제 다음 문제는 총기가 회전 하면 스프라이트 이미지의 모습도 반전되어야 하는데 해당 방법을 찾아봐야 할듯하다.
반응형
LIST
'프로젝트 > 건즈앤 레이첼스' 카테고리의 다른 글
| [유니티] 게임 진입 구조잡기 - as연산자, 비동기식 데이터 로드 (0) | 2023.02.27 |
|---|---|
| [유니티] 대쉬 (회피) 기능 고민 (1) | 2023.02.26 |
| [유니티] 터치 아날로드 패드를 이용한 무기 회전 (0) | 2023.02.26 |
| [유니티] 캐릭터 카메라 제어 : Update() 와 FixedUpdate() 그리고 LateUpdate() (0) | 2023.02.26 |
| [유니티] 2D 아날로그 터치패드 구현 & 애니메이션 (0) | 2023.02.26 |