250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- touchdesigner GPU
- 터치디자이너 파이썬
- 터치디자이너 timeline
- 터치디자이너 강의
- 터치디자이너 python
- 터치디자이너 참조
- 터치디자이너 함수
- 파이썬
- particleGPU
- 터치디자이너 오퍼레이터
- 파이썬 if
- ableton live 10
- 터치디자이너 list
- 터치디자이너 클론
- TDableton
- touchdesigner particle
- 터치디자이너 인터페이스
- displace
- 터치디자이너 Instancing
- 파이썬reference
- TouchDesigner
- 터치디자이너
- touchdesinger
- touchdesigner displace
- 터치디자이너 에이블톤
- 터치디자이너 튜토리얼
- 터치디자이너 if
- 터치디자이너 reference
- 터치디자이너 replicator
- 터치디자이너 interface
Archives
- Today
- Total
caLAB
[유니티 개발] Game Programming Pattern(SOLID 패턴) 본문
728x90
Manager 스크립트
using UnityEngine;
public class SelectionManager : MonoBehaviour
{
private IRayProvider _rayProvider;
private ISelector _selector;
private ISelectionResponse _selectionResponse;
private Transform _currentSelection;
private void Awake()
{
_rayProvider = GetComponent<IRayProvider>();
_selector = GetComponent<ISelector>();
_selectionResponse = GetComponent<ISelectionResponse>();
}
private void Update()
{
if (_currentSelection != null)
_selectionResponse.OnDeselect(_currentSelection);
_selector.Check(_rayProvider.CreateRay());
_currentSelection = _selector.GetSelection();
if (_currentSelection != null)
_selectionResponse.OnSelect(_currentSelection);
}
}
Iselector 인터페이스와
Iselector 인터페이스를 상속한 구현(Implement)
RayCastBasedTagSelector 스크립트
using UnityEngine;
public interface ISelector
{
void Check(Ray ray);
Transform GetSelection();
}
using UnityEngine;
public class RayCastBasedTagSelector : MonoBehaviour, ISelector
{
[SerializeField] private string selectableTag = "Selectable";
private Transform _selection;
public void Check(Ray ray)
{
_selection = null;
if (!Physics.Raycast(ray, out var hit)) return;
var selection = hit.transform;
if (selection.CompareTag(selectableTag))
{
_selection = selection;
}
}
public Transform GetSelection()
{
return _selection;
}
}
IselectionResponse 인터페이스와
IselectionResponse 인터페이스를 상속한 구현(Implement)
OutlineSelectionResponse 스크립트
using UnityEngine;
internal interface ISelectionResponse
{
void OnSelect(Transform selection);
void OnDeselect(Transform selection);
}
using UnityEngine;
public class OutlineSelectionResponse : MonoBehaviour, ISelectionResponse
{
public void OnSelect(Transform selection)
{
var outline = selection.GetComponent<Outline>();
if (outline != null)
{
outline.OutlineWidth = 10;
}
}
public void OnDeselect(Transform selection)
{
var outline = selection.GetComponent<Outline>();
if (outline != null)
{
outline.OutlineWidth = 0;
}
}
}
IRayProvider 인터페이스와
IRayProvider 인터페이스를 상속한 구현(Implement)
MouseScreenRayProvider 스크립트
using UnityEngine;
public interface IRayProvider
{
Ray CreateRay();
}
using UnityEngine;
public class MouseScreenRayProvider : MonoBehaviour, IRayProvider
{
public Ray CreateRay()
{
return Camera.main.ScreenPointToRay(Input.mousePosition);
}
}
https://github.com/LucasDiogo96/S.O.L.I.D
728x90
반응형
'Unity > 유니티 개발' 카테고리의 다른 글
[유니티 개발] 비동기 반환값 (0) | 2022.05.23 |
---|---|
[유니티 개발] Firebase 데이터 getData(), setData() (0) | 2022.05.11 |
[유니티 개발] 유니티 fireBase연동(이미지 업로드 / 다운로드) (0) | 2022.05.02 |
[유니티 개발] Json (0) | 2022.05.02 |
[유니티 개발] Addressable Asset (0) | 2022.04.25 |
Comments