Unity/엔진프로그래밍

0415_좀비슈터 단계별 테스트 _ 움직이고, 부딪치면 충돌 체크

minquu 2021. 4. 15. 15:45
반응형

플레이어와 좀비가 닿았을 때 충돌이 되었는지 체크를 하려한다.

 

해야할 것

 

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("좀비와 충돌하였습니다.");
        }
    }

 

코드를 추가해줍니다. 

플레이어가 트리거가 있는 물체와 닿으면 작동을 하게 되고,

만약그 물체의 태그가 좀비면 

로그를 띄우게 하였습니다.

 

 

 

반응형