충돌, 레이캐스팅, 레이어, 카메라 기능 구현

This commit is contained in:
2026-01-22 02:50:47 +09:00
parent 2eee8e2ab2
commit 16497ffc6e
18 changed files with 1052 additions and 135 deletions

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f76253ea1a32a824db34c144ca1b8d16
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,40 @@
using UnityEngine;
public class CameraController : MonoBehaviour
{
[SerializeField]
Define.Cameramode _mode = Define.Cameramode.QuaterView;
[SerializeField]
Vector3 _delta = new Vector3(0.0f, 6.0f, -5.0f);
[SerializeField]
GameObject _player = null;
void Start()
{
}
void LateUpdate()
{
if (_mode == Define.Cameramode.QuaterView)
{
RaycastHit hit;
if(Physics.Raycast(_player.transform.position, _delta, out hit, _delta.magnitude, LayerMask.GetMask("Wall")))
{
float dist = (hit.point - _player.transform.position).magnitude * 0.8f;
transform.position = _player.transform.position + _delta.normalized * dist;
}
else
{
transform.position = _player.transform.position + _delta;
transform.LookAt(_player.transform);
}
}
}
public void SetQuaterView(Vector3 delta)
{
_mode = Define.Cameramode.QuaterView;
_delta = delta;
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: f04a4f1be0f3364478dd7276aebb2f24

View File

@@ -7,16 +7,36 @@ public class PlayerController : MonoBehaviour
{
[SerializeField]
float _speed = 10.0f;
bool _moveToDest = false;
private Vector3 _destPos;
void Start()
{
Managers.Input.KeytAction -= OnKyeboard;
Managers.Input.KeytAction += OnKyeboard;
Managers.Input.MouseAction -= OnMouseClicked;
Managers.Input.MouseAction += OnMouseClicked;
}
void Update()
{
if (_moveToDest)
{
Vector3 dir = _destPos - transform.position;
if (dir.magnitude < 0.0001f)
{
_moveToDest = false;
}
else
{
float moveDist = Mathf.Clamp(_speed * Time.deltaTime, 0, dir.magnitude);
transform.position += dir.normalized * moveDist;
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 20 * Time.deltaTime);
// transform.LookAt(_destPos);
}
}
}
void OnKyeboard()
@@ -44,5 +64,27 @@ public class PlayerController : MonoBehaviour
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.right), 0.2f);
transform.position += (Vector3.right * Time.deltaTime * _speed);
}
_moveToDest = false;
}
void OnMouseClicked(Define.MouseEvent evt)
{
if (evt != Define.MouseEvent.Click)
{
return;
}
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f);
RaycastHit hit;
if(Physics.Raycast(ray, out hit, 100.0f, LayerMask.GetMask("Wall")));
{
_destPos = hit.point;
_moveToDest = true;
// Debug.Log($"Raycast Camera @ {hit.collider.gameObject.tag}");
}
}
}

View File

@@ -4,17 +4,32 @@ using UnityEngine;
public class InputManager
{
public Action KeytAction = null;
public Action<Define.MouseEvent> MouseAction = null;
bool _pressed = false;
public void OnUpdate()
{
if (Input.anyKey == false)
{
return;
}
if (KeytAction != null)
if (Input.anyKey && KeytAction != null)
{
KeytAction.Invoke();
}
if (MouseAction != null)
{
if (Input.GetMouseButton(0))
{
MouseAction.Invoke(Define.MouseEvent.Press);
_pressed = true;
}
else
{
if (_pressed)
{
MouseAction.Invoke(Define.MouseEvent.Click);
}
_pressed = false;
}
}
}
}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2d042c63c96a92f468db0f239bfc4b48
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,14 @@
using UnityEngine;
public class Define
{
public enum MouseEvent
{
Press,
Click,
}
public enum Cameramode
{
QuaterView,
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a90e7e545f5f7d849ad6e1d942c43416