[TIL] 33 파티클, 사운드 ⭐⭐
카테고리: Til
유니티 숙련주차 4일차 + 개인과제
[o] 알고리즘 문제 - 43
[o] 강의 듣기 - 15강~
[X] 다른반 발표 보기
1. raycast
- Unity에서는
Physics.Raycast
또는Physics2D.Raycast
를 사용하여 Raycast를 수행할 수 있습니다. 이들 메서드는 시작점, 방향, 최대 거리, 그리고 선택적으로 레이어 마스크를 매개변수로 받습니다.- Raycast는 비주얼 디버깅을 위해
Debug.DrawRay
와 함께 사용할 수 있습니다. 이를 통해 Scene 뷰에서 Raycast의 경로를 시각적으로 확인할 수 있습니다.
Debug.DrawRay
// TopDownRangeEnemyController.cs : TopDownEnemyController
int layerMaskTarget = Stats.CurrentStates.attackSO.target;
RaycastHit2D hit = Physics2D.Raycast(transform.position, direction, 11f, (1 << LayerMask.NameToLayer("Level")) | layerMaskTarget);
Debug.DrawRay(transform.position, direction, Color.green);
2. 넉백구현
입력을 받지 않으면 knockbackDuration이 줄어들지 않는다.
// TopDownMovement
private void Start()
{
_controller.OnMoveEvent += Move;
}
private void FixedUpdate()
{
ApplyMovement(_movementDirection);
}
private void Move(Vector2 direction)
{
_movementDirection = direction;
if (knockbackDuration > 0.0f)
{
knockbackDuration -= Time.fixedDeltaTime;
}
}
private void ApplyMovement(Vector2 direction)
{
direction = direction * _stats.CurrentStates.speed;
if (knockbackDuration > 0.0f)
{
direction += _knockback;
}
_rigidbody.velocity = direction;
knockbackDuration -= Time.fixedDeltaTime;
}
public void ApplyKnockback(Transform other, float power, float duration)
{
knockbackDuration = duration;
_knockback = -(other.position - transform.position).normalized * power;
}
}
- 코드에서 OnMove (방향키 입력 받을 때) 만 knockbackDuration -= Time.fixedDeltaTime; 가 된다. 그러므로 넉백이 계속 발생하는 현상이 있다고 생각했다.
- 코드를 ApplyMovement 부분에 넣었고 update가 되며 넉백시간이 적용되게 하였다.
3. 파티클 시스템
- 파티클 시스템은 수 천개의 작은 2D 또는 3D 오브젝트들을 관리하고, 그들의 동작과 생애를 제어
- 주요 컴포넌트는 ‘emitter’(발사체), ‘particles’(파티클), ‘animator’(애니메이터), ‘renderer’(렌더러) 등
파티클
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DustParticleControl : MonoBehaviour
{
[SerializeField] private bool createDustOnWalk = true;
[SerializeField] private ParticleSystem dustParticleSystem;
public void CreateDustParticles()
{
if (createDustOnWalk)
{
dustParticleSystem.Stop();
dustParticleSystem.Play();
}
}
}
애니메이션 이벤트 추가
타격 시 파티클
ProjectileManager 수정
public void CreateImpactParticlesAtPostion(Vector3 position, RangedAttackData attackData)
{
_impactParticleSystem.transform.position = position;
ParticleSystem.EmissionModule em = _impactParticleSystem.emission;
em.SetBurst(0, new ParticleSystem.Burst(0, Mathf.Ceil(attackData.size * 5)));
ParticleSystem.MainModule mainModule = _impactParticleSystem.main;
mainModule.startSpeedMultiplier = attackData.size * 10f;
_impactParticleSystem.Play();
}
RangedAttackController 수정
private void DestroyProjectile(Vector3 position, bool createFx)
{
if(createFx)
{
_projectileManager.CreateImpactParticlesAtPostion(position, _attackData);
}
gameObject.SetActive(false);
}
Particle System-Emission
SetBurst
new PaticleSystem.Burst
4. 사운드
5. collider 2D 2개
trigger충돌도 추가로 가능
댓글남기기