플레이어와 좀비가 닿았을 때 충돌이 되었는지 체크를 하려한다.
해야할 것
1. 캐릭터를 움직여야함
2. 서로 부딪쳤을때 로그가 떠야함
----
0.캐릭터와 좀비를 세팅한다.
1.캐릭터를 움직이게 한다.
-Input.GetAxis 를 사용해서 움직인다.
먼저 move할 코드를 넣을 스크립터를 만들어준다..
public float Move { get; private set; }
public float Rotate { get; private set; }
맴버 변수에 Move과 Rotate 값을 받을 속성변수를 만들어 준다.
public void Update()
{
this.Move = Input.GetAxis("Vertical");
this.Rotate = Input.GetAxis("Horizontal");
}
업데이트에서 그 변수에 값을 꾸준히 업데이트 받으면서 값을 입력해준다.
GetAxis("키워드"); ==> edit -> project Settings -> inputManager -> Axes 안에 있는 키를 입력하면
값이 증가하는 것
포지티브 버튼을 하면 양의 값으로 증가
네거티브 버튼을 하면 음의 값으로 증가
GetAxis("Vertical") // 같이 안에는 인풋 매니저에 있는 문자열을 넣어주면 된다.
//리지드 바디
private Rigidbody rigidbody;
//앞 뒤 움직이는 속도
public float moveSpeed = 5f;
//좌 우 회전 속도
public float rorateSpeed = 100f;
public void Awake()
{
this.rigidbody = GetComponent<Rigidbody>();
}
리지드 바디를 불러와준다.
속도와 도는 속도를 변수로 지정해준다.
public void Moving() {
//상대적으로 이동할 거리 계산
Vector3 moveDistance = this.Move * transform.forward * moveSpeed * Time.deltaTime;
//리지드바디 이용해서 게임오브젝트 위치변경
rigidbody.MovePosition(rigidbody.position + moveDistance);
}
움직이는 메서드를 만들어준다.
Vector3 moveDistance 는 방향 * 속도 * 시간의 값을 가지고있는다
this.move * transform.forward 로 방향을 정해준다. // forward면 현재 오브젝트의 앞으로
rigibody.MovePosition(rigidbody.position + moveDistance );
현재 리지드 바디에 무브포지션 키워드를 사용하여 이동을 해준다.
현재 포지션에서 moveDistance 만 추가를 해준다. moveDistance는 앞 뒤 만 움직인다.
public void Rotating()
{
//상대적으로 회전할 수치계산
float turn = this.Rotate * rorateSpeed * Time.deltaTime;
//리지드 바디를 이용해 게임 오브젝트 회전변경
rigidbody.rotation = rigidbody.rotation * Quaternion.Euler(0, turn, 0f);
}
비슷한 방법으로 로테이션도 해줍니다.
회전할 수치를 turn 값으로 받습니다.
turn = this.Rotate (getAxis를 받은 음과 양의 값) * rorateSpeed(각을 트는 속도) * 시간
리지드 바디. rotation 키워드를 사용합니다.
rigidbody.rotation = rigibody.rotation(현재 리지드바디의 로테이션값) * Quaternion.Euler(0, turn, 0f);
★(로테이션은 사원수를 사용해야함. 사원수.Euler(x y z) 값을 넣어준다.)
// 현재는 Y값만 사용하기 때문에, Y 값에, turn 값을 넣우 줍니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CrashCheck : MonoBehaviour
{
public float Move { get; private set; }
public float Rotate { get; private set; }
//리지드 바디
private Rigidbody rigidbody;
//앞 뒤 움직이는 속도
public float moveSpeed = 5f;
//좌 우 회전 속도
public float rorateSpeed = 100f;
public void Awake()
{
this.rigidbody = GetComponent<Rigidbody>();
}
private void FixedUpdate()
{
this.Moving();
this.Rotating();
}
public void Update()
{
this.Move = Input.GetAxis("Vertical");
this.Rotate = Input.GetAxis("Horizontal");
}
public void Moving() {
//상대적으로 이동할 거리 계산
Vector3 moveDistance = this.Move * transform.forward * moveSpeed * Time.deltaTime;
//리지드바디 이용해서 게임오브젝트 위치변경
rigidbody.MovePosition(rigidbody.position + moveDistance);
}
public void Rotating()
{
//상대적으로 회전할 수치계산
float turn = this.Rotate * rorateSpeed * Time.deltaTime;
//리지드 바디를 이용해 게임 오브젝트 회전변경
rigidbody.rotation = rigidbody.rotation * Quaternion.Euler(0, turn, 0f);
}
}
------
좀비와 충돌시 로그 나오게하기
먼저 좀비의 태그를 정해줍니다.
좀비에게 중력을 없애고, 콜리더를 트리거로 바꿔줍니다.
public void OnTriggerEnter(Collider other)
{
if (other.tag == "Zombie") {
Debug.Log("좀비와 충돌하였습니다.");
}
}
코드를 추가해줍니다.
플레이어가 트리거가 있는 물체와 닿으면 작동을 하게 되고,
만약그 물체의 태그가 좀비면
로그를 띄우게 하였습니다.
'Unity > 엔진프로그래밍' 카테고리의 다른 글
0415_좀비슈터 단계별 테스트 _ 좀비가 타겟을 바라보고 이동 (0) | 2021.04.15 |
---|---|
0415_좀비슈터 단계별 테스트 _ UI만들고, 부딪치면 체력깍이게하기 (0) | 2021.04.15 |
0415_좀비슈터 단계별 테스트 _ LineRenderer (0) | 2021.04.15 |
0415_좀비슈터 단계별 테스트 _ 자동발사 (0) | 2021.04.15 |
0415_좀비슈터 단계별 테스트 _ IK 사용하여 총에 손 달기 (0) | 2021.04.15 |