일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 유니티
- 길건너 친구들
- CGV
- 유니티 Json 데이터 연동
- 앱 배포
- Oculus
- VR
- input system
- 오큘러스
- 드래곤 플라이트
- 유니티 GUI
- 모작
- 팀 프로젝트
- 팀프로젝트
- 개발일지
- 포트폴리오
- 드래곤 플라이트 모작
- 가상현실
- ChatGPT
- XR
- 멀티플레이
- 연습
- 오브젝트 풀링
- 개발
- HAPTIC
- 유니티 UI
- meta xr
- meta
- OVR
- Photon Fusion
Archives
- Today
- Total
EasyCastleUNITY
충돌감지를 통한, 플레이어 회전 변경 본문
벽과 부딫치면, 벽의 법선벡터 방향으로 회전하여, 벽에 붙는다.
실행영상
플레이어 이동및 충돌처리 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Test
{
public class Player : MonoBehaviour
{
private float moveSpeed = 3.0f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//이동
this.transform.Translate(this.transform.forward * this.moveSpeed * Time.deltaTime);
}
private void OnCollisionEnter(Collision collision)
{
this.moveSpeed = 0.0f;
ContactPoint cp = collision.GetContact(0);
Quaternion rot = Quaternion.LookRotation(cp.normal);
this.transform.rotation = rot;
}
}
}
유의한 점
처음으로 ContactPoint 라는 클래스를 사용해보았다.
충돌한 물체의 정보들을 받아오는 클래스로, GetContact(0)은 처음 부딫친 물체의 정보를 의미한다.
자연스럽게 회전하는거 추가
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Test
{
public class Player : MonoBehaviour
{
[SerializeField]
private Transform eye;
private float moveSpeed = 0.2f;
private float rotateSpeed = 1.0f;
private Quaternion rot;
[SerializeField]
private Transform startTrans;
[SerializeField]
private Transform endTrans;
[SerializeField]
[Range(0f, 1f)]
private float elapsedTime = 0.0f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//눈에서 정면을 향해 ray 발사
Ray ray = new Ray(this.eye.position, this.transform.forward);
//Debug.DrawRay(ray.origin, ray.direction * 100f, Color.blue, 5f);
RaycastHit hit;
if(Physics.Raycast(ray, out hit, 100f))
{
this.rot = Quaternion.LookRotation(hit.normal);
DrawArrow.ForDebug(hit.point, hit.normal, 5.0f, Color.green, ArrowType.Solid);
this.endTrans.position = new Vector3(hit.point.x,this.transform.position.y,hit.point.z);
}
//이동
this.StartCoroutine(this.CoMoveForward());
//this.transform.position= Vector3.Lerp(this.startTrans.position,this.endTrans.position,Time.deltaTime);
}
private IEnumerator CoMoveForward()
{
while (true)
{
if (Vector3.Distance(this.transform.position, this.endTrans.position) <= 0.1f)
{
break;
}
this.transform.Translate(this.transform.forward * this.moveSpeed * Time.deltaTime);
yield return null;
}
Debug.Log("move complete");
while (true)
{
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, rot, Time.deltaTime * this.rotateSpeed);
if(this.transform.rotation == rot)
{
break;
}
yield return null;
}
Debug.Log("rotate complete");
}
}
}
'유니티 심화' 카테고리의 다른 글
가장 가까운 무기 장착 (0) | 2023.08.21 |
---|---|
총알반사 (0) | 2023.08.21 |
[과제]궁수의 전설 이동 및 공격 만들기(2023.08.23 00:01분 최종완성) (0) | 2023.08.19 |
3D Space Shooter Test1 (0) | 2023.08.18 |
Space Shooter 카메라 Player Follow (0) | 2023.08.18 |