유니티 총알 궤적 - yuniti chong-al gwejeog

유니티 총알 궤적 - yuniti chong-al gwejeog

Add Component를 눌러 Trail Renderer를 검색한뒤 추가한다.

이 컴포넌트를 총알객체에 추가한 뒤 총알을 쏴보면

총알이 지나간 자리에 분홍색 메쉬가 생성되면서 지나건 것을 볼 수 있을 것이다.

색이 분홍색인것은 연결된 머테리얼이 없다는 뜻이다.

그리고 크기또한 들쭉날쭉 하고 메쉬가 사라지는 시간이 굉자히 길것이다.

그렇기 때문에 몇가지 속성을 수정해줄 필요가 있다.

우선 분홍색의 메쉬를 다른색으로 바꿔주기 위한 머테리얼을 추가하자.

Time : 동적으로 생성된 메쉬의 지속시간.

Width : 메쉬의 폭.

Color : Material에 연결된 텍스처 색상의 애니메이션 효과로 총 5단계의 색상을 그라데이션처리 할 수 있다.

Min Vertex Distance : 동적으로 생성되는 폴리곤 사이의 간격 설정 값. 수치가 낮을수록 촘촘하게 생성된다.

AutoDestruct : Time이 지나면 Trail Renderer를 포함한 GameObject를 소멸시킴.

Trail Renderer Component를 이용해서 궤적을 시각화하는 강좌. 트레일 렌더러의 콤포넌트의 옵션을 수정해서 다양한 궤적을 만들 수 있어요.

#Trail Renderer#이동궤적 #유니티

트레일 렌더러(Trail Renderer) 콤포넌트 옵션

- Width : 트레일러 두께값

- Time : 궤적이 나타나는 시간값

- Color : 궤적의 색상(그라디언트), 투명도 조절

- Materials - Element : 시각화 이미지, 메테리얼

TrailRenderer C#

startWidth / endWidth

startColor / endColor 등이 있습니다.

[LineControl.cs]

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

public class LineControl : MonoBehaviour
{
    
    private TrailRenderer trail;

    // Start is called before the first frame update
    void Start()
    {
        trail = GetComponent<TrailRenderer>();
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            trail.endWidth = 5f;
            trail.startColor = Color.cyan;
        }
        else
        {
            trail.endWidth = 0.5f;
            trail.startColor = Color.yellow;
        }
    }
    
}

Date: 2020.07.28    Updated: 2020.07.28

카테고리: Unity Lesson 1

태그: Unity Game Engine

인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!

Chapter 11. 좀비 TPS 게임 만들기

Gun 오브젝트

유니티 총알 궤적 - yuniti chong-al gwejeog

  • 📂Assets/Prefabs 에 있는 🟦Gun 프리팹을 Player CharacterGun Pivot의 자식 오브젝트로 넣어주자!
    • 총은 플레이어의 것이니까.
  • 총을 쏘는 Shooter 를 분리해줄 것이다.
    • 간결함과 확장성을 위하여
      • 예를 들어 총을 교체하는 시스템을 구현할 때 Shooter는 그대로이되 총만 바꿔주면 되어서 간결함
    • 도구도구를 실제로 사용하는 매커니즘은 분리해주는 것이 좋다.

    • 📜Gun, 📜PlayerShooter

구성

  • Gun
    • 자식 1 👉 Left Hand
      • 모델의 왼손이 배치될 곳
      • 모델의 왼손이 Gun 오브젝트의 Left Hand에 자동으로 붙게 할 것.
        • IK를 통해 관절을 꺾어 모델의 왼손이 배치될 총의 지점.
    • 자식 2 👉 Fire Transform
      • 총알이 나가는 위치와 방향을 결정
      • 총의 발사구에 위치
    • 자식 3 👉 Model
      • 총의 3 D 모델. 생김새.
  • Gun의 Pivot 좌표(= 기준점)는 총의 오른 손 잡이에 배치되어 있다.
    • Gun이 자동으로 Player Character의 오른손에 배치되도록 할 것
      • 📜LateUpdatedFollow.cs 가 할 일.

📜LateUpdatedFollow.cs

Gun 오브젝트에 붙여준다.

  • Gun의 기준점(Pivot)인 Gun의 오른손 총 잡이 부분이 자동으로 항상 Player Character의 오른손의 위치에 배치되도록 하는 역할을 한다.
  • 매 프레임마다 특정 Transform 위치, 회전(👉 Player Character의 오른손)으로 자기 자신의 Transform 위치, 회전(👉 Gun)에 덮어 씌운다.

using UnityEngine;

public class LateUpdateFollow : MonoBehaviour
{
    public Transform targetToFollow; // 따라갈 대상 Transform

    private void LateUpdate()
    {
        // 매 프레임마다 덮어 씌운다.
        transform.position = targetToFollow.position;
        transform.rotation = targetToFollow.rotation;
    }
}

  • LateUpdate
    • 유니티 함수로, 매 프레임마다 실행되지만 Update()함수 보다 늦게 실행된다.
      • Update() 함수 실행이 다 끝난 후에, Update()함수의 종료 시점에 맞춰서 LateUpdate() 가 실행된다.
    • 예를 들어 캐릭터의 이동 방향 계산은 Update() 에서 끝내준 후,Update()에서 계산 끝낸 캐릭터의 이동 방향에 따라 LateUpdate()에서 카메라가 캐릭터를 따라가도록 하는 식으로 구현한다.
  • targetToFollow 슬롯에 Player Character의 뼈대가 되는 모델 중 하나인 오른손 모델 LowManRightHand를 드래그 앤 드롭 해준다.

Offset 을 두어 오른손에 자연스럽게 배치하기

  • GunPlayer Character의 오른손 위치에 그대로 일치하게 배치하면 좀 부자연스러워 보일 수 있기 때문에 Player Character의 오른손 위치에서 조금 차이를 둔 위치와 회전에 Gun을 배치하도록 하자.

오른 손 모델 LowManRightHand의 자식 오브젝트로 빈 오브젝트인 Right Hand Attach라는 이름의 오브젝트를 생성해준다.

  • 오른 손에 쥐어 줄 물체를 위한 오브젝트.
    • 오른 손에 쥐어 줄 때 약간의 Offset을 두어 위치와 회전 값을 설정해주기 위하여 생성.
  • LowManRightHand의 자식이므로 Right Hand Attach에서 조작하는 Transform 값은 부모인 `LowManRightHand`로부터 떨어진 위치와 회전을 나타낸다.
    • Right Hand Attach의 위치를 (0.016, 0.1, 0.11) 로 설정해준다.
      • 즉, 부모인 LowManRightHand로부터 (0.016, 0.1, 0.11)만큼 떨어진 곳에 위치.
    • Right Hand Attach의 회전을 (-50, -18.7, 189) 로 설정해준다.
      • 즉, 부모인 LowManRightHand의 회전값보다 (-50, -18.7, 189)만큼 더 회전.
  • targetToFollow 슬롯에 이 Right Hand Attach를 드래그 앤 드롭 해준다.

    • 유니티 총알 궤적 - yuniti chong-al gwejeog
  • 이제 적절히 오른 손에 견착된 것을 알 수 있다.
    • 유니티 총알 궤적 - yuniti chong-al gwejeog

오른손은 위와 같이 코드를 통하여 총의 피봇이 늘 오른손의 위치와 회전(좀 Offset이 된)으로 덮어씌우게끔 했고, 왼손은 추후 IK 애니메이션을 통하여 늘 왼손이 총을 자연스럽게 딱 잡고있게끔 구현할 것이다.

Line Renderer 컴포넌트

총을 쏠 때, 총알의 궤적을 그리기 위한 컴포넌트. 검색하여 Gun 오브젝트에 붙여준다.

  • 주어진 점들을 이은 선을 그리는 역할을 한다.
  • Cast Shadows
    • Off 시켜준다. 총알 궤도의 그림자를 발생시킬 필요 없음.
  • Recive Shadows
    • 체크 해제 해준다. 총알 궤도가 그림자를 받을 필요는 없음.
  • 총알 궤적의 색깔을 입혀 줄 Material Element를 Bullet Color Meterial로 설정해준다.
    • 노란색임!
  • Position의 Size를 0으로 해준다.
    • size는 점의 개수를 뜻한다. size 수를 지정하면 그 만큼 좌표 슬롯들이 열리는데 점의 좌표를 각각 지정해줄 수 있다.
    • 코드 상에서 지정할거라서.. 일단 0 으로 해둔다.
      • 총알이 발사되는 점 - 총알이 닿은 점을 잇는 선분을 그리도록 코드로 구현할 것.
  • 선의 두께는 0.02로 줄여주기

총을 쏘는 그 순간에만 아주 일시적으로 총알 궤적을 그릴 것이다. 따라서 평소에는 Line Renderer 컴포넌트를 꺼두고 총을 쏠 때만 활성화 하고 다시 바로 꺼야 한다.

  • Line Renderer 비활성화 하기

Audio Source 컴포넌트

발사 소리를 재생

  • Play On Awake 해제

파티클 효과


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기