티스토리 뷰
반응형
-기준픽셀을 지정하여 캠의 중간 지점 픽셀 컬러값을 int로 변환하여 변화값(deltaThreshhlod)에 따른 true/false 리턴하는 로직
public class WebCamScript : MonoBehaviour
{
[SerializeField]
RawImage[] display;
WebCamTexture camTexture;
ManagerScripts managerScripts;
private int currentIndex = 0;
/// <summary>
///변수
/// </summary>
public int defaultPixel = 337; //기준 픽셀값 나중에 수정 가능한 형태로 만들것(화면 찍어서 가져오게하든 뭐하든)
int baseX = 0; // 기준 픽셀 X
int baseY = 0; // 기준 픽셀 Y
float deltaThreshold = 40; // 변화값
private void Awake()
{
WebcamStop();
Init();
}
private void Start()
{
managerScripts = this.GetComponent<ManagerScripts>();
}
void Init()
{
if (camTexture != null)
{
for (int i = 0; i < display.Length; i++)
display[i].texture = null;
camTexture.Stop();
camTexture = null;
}
WebCamDevice device = WebCamTexture.devices[currentIndex];
camTexture = new WebCamTexture(device.name);
for (int i = 0; i < display.Length; i++)
display[i].texture = camTexture;
Debug.Log(display.Length);
camTexture.Play();
//승진 추가(2024-02-19) 픽셀 중간값으로 설정
baseX = camTexture.width / 2;
baseY = camTexture.height / 2;
}
/// <summary>
///캠 켜져있으면 연산
/// </summary>
void Update()
{
//조건에 플래그 추가해서 쓰셈 isCheckMode 뭐 이런거나 CheckMode이런거 조건으로 if (IsCheckMode&&camTexture.didUpdateThisFrame)
if (camTexture.didUpdateThisFrame)
{
Color32 pixelColor = camTexture.GetPixel(baseX, baseY);
int pixelValue = ConvertColorToInt(pixelColor);
IsSignificantChange(pixelValue);
}
}
//단순 int 값으로 변환
int ConvertColorToInt(Color32 color)
{
return color.r + color.g + color.b;
}
//픽셀 변화량 조건
bool IsSignificantChange( int pixelValue)
{
//defaultPixel을 기준으로 현재값 변화량 비교
int delta = Mathf.Abs(pixelValue - defaultPixel);
Debug.Log(pixelValue);
Debug.Log($"pixelValue:{pixelValue} defaultPixel:{defaultPixel} deltaThreshlod:{deltaThreshold} delta:{delta}");
//지정된 변화량보다 크면 True 리턴 나중에 이벤트로 만들어서 쓰면 편함
if (delta > deltaThreshold)
{
Debug.Log("true");
return true;
}
else
{
return false;
}
}
void WebcamStop()
{
// WebCamTexture 리소스 반환
if (camTexture != null)
{
camTexture.Stop();
WebCamTexture.Destroy(camTexture);
camTexture = null;
managerScripts.Log("webcamTexture exist! now destroy");
}
}
private void OnApplicationQuit()
{
WebcamStop();
}
}
#unity #유니티 #c# #webcam
반응형
'유니티(unity)' 카테고리의 다른 글
[c#/unity] 유니티에서 pdf 생성(with iTextSharp 5.0 ) (0) | 2024.02.27 |
---|---|
[c#/unity] 이미지 갤러리에 저장하기(with Native Gallery) (0) | 2024.02.27 |
[unity/Simple Disk Utils]ios/android/windows 남은 용량 확인(with source) (0) | 2024.02.07 |
[C#/Unity] UDP 기본 코드 (0) | 2024.01.31 |
[unity/android] fcm을 이용한 푸쉬 구현 (0) | 2024.01.05 |
댓글
반응형