1-18)TIL

최보훈·2024년 1월 18일
0

TIL

목록 보기
12/28
post-thumbnail

Linq 정렬

  • OrderBy()
    • 오름차순 정렬
  • OrderByDescending()
    • 내림차순 정렬
  • Ex)
    •  public string solution(string s)
       {
       	string answer = "";
       	foreach(var item in s.ToCharArray().OrderByDescending(x=>x))
       	{
       	   Console.WriteLine(item);
      	}
      	 return answer;
       }

    Unity

    PPU = Pixel Per Unit

  • 유니티의 단위1 에 몇 픽셀이 들어오게 할 것인가를 말하는것

    유니티의 square 오브젝트는 항상 1유닛에 1유닛이다.
    위의 이미지에서 기사의 이미지는 ppu가 16으로 설정되어있다. = 1유닛에 16픽셀을 넣을것이다.
    이 이미지는 초기 설정이 16X28 으로 설정되어있다.

Action/event

Action음 매개 변수와 반환 값이 없는 메서드를 나타내는 대리자 유형이다. 런타임중에 구독하고 발동할 수 있는 이벤트를 만드는 데 사용된다. event키워드는 Aciton 을 그 클래스 내부에서만 사용하겠다고 하는것이다.

  • 이번 프로젝트에서의 사용 과정(플레이어 이동관련)
TopDownPlayerController.cs
public class TopDownPlayerController : MonoBehaviour
{
    public event Action<Vector2> OnMoveEvent;

    public void CallMoveEvent(Vector2 direction)
    {
        OnMoveEvent?.Invoke(direction);    //(0)
    }
}

OnMoveEvent Action을 만들어준다.

PlayerInputController.cs
{
	// 유니티의 새로운 인풋시스템.
    public void OnMove(InputValue value) //move에 해당하는 이벤트 발생시
    {
        Vector2 moveInput = value.Get<Vector2>().normalized;  
        CallMoveEvent(moveInput);       //해당 백터2값을 CallMoveEvent
    }
}
TopDownMovement.cs
public class TopDownMovement : MonoBehaviour
{
    private TopDownPlayerController _controller;

    private Vector2 _movementDirection = Vector2.zero;
    private Rigidbody2D _rigidBody;

    private void Awake()
    {
        _controller = GetComponent<TopDownPlayerController>();
        _rigidBody = GetComponent<Rigidbody2D>();
    }
    private void Start()
    {
        _controller.OnMoveEvent += Move;         //(1)이벤트 구독 
    }
    private void FixedUpdate()
    {
        ApplyMovement(_movementDirection);
    }
    
    private void ApplyMovement(Vector2 dir)
    {
        dir = dir * 5;
        _rigidBody.velocity = dir;
    }
    private void Move(Vector2 dir)
    {
        _movementDirection = dir;
    }
}
  • (1) PlayerInputController.cs의 OnMove의 인풋이 생겼을때 CallMoveEvent()메서드를 통해 OnMoveEvent를 호출한다. 그러면 지금 여기서 이벤트를 구독했기 때문에 Move()함수또한 실행이 된다.
  • (1) 구독을 안한경우 TopDownPlayerController.cs의(0) 부분이 Null이 된다.

0개의 댓글