FBSGunTarget 1인칭 시점
object grab !
전체적인 구도
Player시점에 카메라가 위치함 , 앞에있는 큐브를 집는 로직
Hierarchy창
Player Inspector
Hand Script
public class Hand : MonoBehaviour
{
Transform cam;
Transform grabObject;
public Transform hand;
void Start()
{
cam = Camera.main.transform;
}
// Update is called once per frame
void Update()
{
// 만약 잡은물체가 있다면
if (grabObject != null)
{
// 잡은 물체를 목적지를 향해 이동시키고 싶다
grabObject.position = Vector3.Lerp(grabObject.position, hand.position, Time.deltaTime * 5);
//거리를 측정하고
float distance = Vector3.Distance(grabObject.position, hand.position);
//목적지에 도착했다면 (거리가 0.1이하라면) 파괴하고싶다
if (distance <= 0.1f)
{
Destroy(grabObject.gameObject);
grabObject = null;
}
}
// 1. 만약 마우스 왼쪽버튼을 누르고있으면
if (Input.GetButton("Fire1"))
{
// 2.카메라에서 카메라 앞방향으로 시선을 만들고,
Ray ray = new Ray(cam.position, cam.forward);
// 3. 그 시선으로 바라보고 부딪힌 것이 있다면
RaycastHit hitInfo;
if (Physics.Raycast(ray, out hitInfo))
{
// 4. 그 물체를 손으로 가져오고 싶다
if (hitInfo.transform.CompareTag("Grabbable"))
{
grabObject = hitInfo.transform;
}
}
}
//만약 마우스 왼쪽버튼을 뗐을 때
else if (Input.GetButtonUp("Fire1"))
{
//잡고있는 물체가 있다면
if (grabObject != null)
{
//놓고싶다
grabObject = null;
}
}
}
}
Game 창
MainCamera Inspector
CameraRotate Script
public class CameraRotate : MonoBehaviour
{
float rx, ry, rotSpeed = 200;
void Start()
{
}
void Update()
{
float mx = Input.GetAxis("Mouse X");
float my = Input.GetAxis("Mouse Y");
rx += my * rotSpeed * Time.deltaTime;
ry += mx * rotSpeed * Time.deltaTime;
rx = Mathf.Clamp(rx, -60, 60);
transform.eulerAngles = new Vector3(-rx, ry, 0);
}
}
결과 : 마우스방향에 따라 화면이 움직이고, 마우스 왼쪽 버튼으로 큐브를 잡고 놓을 수 있음
'유니티' 카테고리의 다른 글
공격을 받았을 때 Material 바꾸기 (Flash effect) (0) | 2022.05.24 |
---|---|
싱글톤 Singleton (C#) (0) | 2022.05.15 |
프로퍼티(Property) get; set; (0) | 2022.05.12 |
c# 기본 (0) | 2022.05.09 |
Vector3 , Unity Lifecycle, 타겟 추적, 총구 발사 생성 (0) | 2022.05.09 |