유니티 3D 아이템 - yuniti 3D aitem

(이 포스트는 골드메탈님의 기초만 꾹꾹 눌러담은 3D 게임 만들기 강의를 보고 제작하였습니다.);

게임을 만들기 앞서 우리는 계획을 짜야한다.

유니티 3D 아이템 - yuniti 3D aitem

이런 방식으로 말이다!

플레이어가 움직일 수 있고
점프를 한번만 가능한 코드는 이렇다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class playerball : MonoBehaviour
{
    public float JumpPower = 10;
    bool isJump;
    Rigidbody rigid;

    void Awake()
    {
        isJump = false;
        rigid = GetComponent();
    }

    void Update()
    {
        if (Input.GetButtonDown("Jump")&& !isJump)
        {
           isJump = true;
           rigid.AddForce(new Vector3(0, JumpPower, 0), ForceMode.Impulse);
        }
    }

    void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Vertical");
        rigid.AddForce(new Vector3(h, 0, v),ForceMode.Impulse);
    }
    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.name == "test")
            isJump = false;
    }
}

점프를 가능하게했는데 그렇게만 설정하면 점프가 무한대로 된다.
그래서 조건문에 점프를 한번만 하게 했는데
그렇게 하면 점프가 딱 한번되고 이후로 안된다.
그래서 마지막에 만약 땅이랑 충돌하면 점프가 다시 가능하게 설정하여
한번만 점프가 게임 안에서 계속 가능하도록 설정하였다.

아이템

유니티 3D 아이템 - yuniti 3D aitem

아이템을 만들어주고 우리는
아이템이 빙글빙글 돌아갔으면 좋겠어서
스크립트를 하나만들어줬다.

유니티 3D 아이템 - yuniti 3D aitem

빙글빙글도는데 와이축으로만 돌것이여서 새로운 백터를 만들어주지않고
그저 up 을 사용해주고 로테이트 스피드만큼 돌리는데 이는 퍼블릭으로 설정해 언제든지 유니티내에서
수정이 가능하게 했다.
그리고 델타타임을 주어서 어떤 컴퓨터든 동일한 회전을 하게 설정하였다.

그런데!
이 상태로 돌리면 로컬 좌표계를 기준으로 돌아서 그저 아이템이 자신의 축을 기준으로 돈다!
우리가 원하는건 글로벌 좌표계이므로 다시 스크립트로 돌아와서
Rotate 네번째 인자에 Space.Worl를 추가해주면 된다!!

이제 아이템을 먹으면 사라지게 만들어주자

    void OnTriggerEnter(Collider other)
    {
        if(other.name == "player")
        {
            playerball player = other.GetComponent();
            player.itemCount++;
            gameObject.SetActive(false);
        }
    }

이 코드를 아이템 스크립트에 넣어주고
플레이어에는 itemCount 변수를 만들어준다.
SetActive 함수를 통해서 만약 플레이어와 캡슐이 충돌한다면 플레이어 아이템카운트를 하나 늘리고 아이템을 안보이게 만들어주는 함수이다 .

그리고 에셋스토어에서 무료 사운드를 들고와서
컴포넌트에 입힌다.

그런데 사운드를 입히고 나도 소리가안나는데 이는 아이템한테 주어서 오류가 발생해서이다.

그래서 충돌처리 함수를 플레이어에게 주고
아이템을 복사하여 여러 아이템을 먹을수 있게 만들어야하는데
name으로 설정하여 아이템 하나에만 소리가 난다.
그래서 태그를 추가해서 태그에 속성을 주어서 태그에서 사운드가 나오게 만들어준다.

플레이어 소스코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class playerball : MonoBehaviour
{
    public float JumpPower = 10;
    public int itemCount;
    bool isJump;
    Rigidbody rigid;
    AudioSource audio;

    void Awake()
    {
        isJump = false;
        rigid = GetComponent();
        audio = GetComponent();
    }

    void Update()
    {
        if (Input.GetButtonDown("Jump")&& !isJump)
        {
           isJump = true;
           rigid.AddForce(new Vector3(0, JumpPower, 0), ForceMode.Impulse);
        }
    }

    void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Vertical");
        rigid.AddForce(new Vector3(h, 0, v),ForceMode.Impulse);
    }
    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "Floor")
            isJump = false;
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.tag == "item")
        {
            itemCount++;
            audio.Play();
            other.gameObject.SetActive(false);
        }
    }
}

아이템 소스

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ItemCan : MonoBehaviour
{
    public float rotateSpeed;

    void Update()
    {
        transform.Rotate(Vector3.up*rotateSpeed*Time.deltaTime, Space.World);
    }


}

카메라

기존에 실행하면
카메라가 고정되어있어서..
영... 아니였다 !
그래서 일단 카메라를 3인칭 시점으로 보기좋게 위치를 옮겨놓는다.

유니티 3D 아이템 - yuniti 3D aitem

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Camera : MonoBehaviour
{
    Transform playerTransform;
    Vector3 Offset; 

    void Awake()
    {
        playerTransform = GameObject.FindGameObjectWithTag("Player").transform;
        Offset = transform.position - playerTransform.position;

    }

    void LateUpdate()
    {
        transform.position = playerTransform.position+Offset;
    }
}

그리고 이 코드를 넣어주면 카메라가 플레이어를 따라다닌다!!
그런데 ! 그렇게만하면 카메라가 플레이어 자체가되어 1인칭시점이되서어 offest 을 설정해줘서 플레이어와 카메라 사이의 벡터값을 추가로 더해주면 우리가 원하는 시점으로 카메라를 플레이어에 맞춰 팔로우 할 수 있게할수있다.

이후에
Ui설정과 씬 추가등등을 하였다....

그리하여!!

유니티 3D 아이템 - yuniti 3D aitem

빌드까지 해서 완성하였다!!!

되게 신기했당

시작에 앞서 유니티 화면 뜨는게 신기했다!!!

영상

이제 다음은 3디 게임이라는데
이 게임을 조금 더 수정해서 여러 스테이지로 업데이트해야겠다 !!