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
- ableton live 10
- 파이썬 if
- TouchDesigner
- 터치디자이너 reference
- touchdesigner particle
- 터치디자이너 replicator
- 터치디자이너 Instancing
- 터치디자이너 클론
- 터치디자이너 python
- 터치디자이너 강의
- 터치디자이너 list
- 파이썬
- TDableton
- 터치디자이너 에이블톤
- 터치디자이너 interface
- 터치디자이너 함수
- touchdesinger
- displace
- 터치디자이너 참조
- touchdesigner GPU
- 터치디자이너 파이썬
- 파이썬reference
- 터치디자이너
- 터치디자이너 인터페이스
- 터치디자이너 튜토리얼
- 터치디자이너 timeline
- 터치디자이너 if
- particleGPU
- touchdesigner displace
- 터치디자이너 오퍼레이터
Archives
- Today
- Total
caLAB
pinch Interaction 시뮬레이션(zoom, rotation) 본문
728x90
휴대폰에 build해서 테스트 하기 귀찮아서
원래 터치로 하는 pinch 인터렉션 로직 변형해서 PC에서 테스트 하도록 만들었다.
pinch pos는 pointA랑 pointB가 일정한 가까운 거리에 있을 때 두 point 중간값으로 타겟 오브젝트 이동하게 개발.
pinch zoom in zoom out은 pointA와 pointB 사이의 거리를 타겟 오브젝트의 사이즈와 연동시킴.
pinch rotate는 current point A와 B의 뺄셈을 통해서 방향벡터를 구한 후에 prev point A와 B의 뺄셈 방향벡터 즉,
prev Vector(A to B)와 current Vector(A to B) 사이의 각도를 구한 후에 타겟 오브젝트의 회전값과 연동시킴.
using UnityEngine;
public class touchScript : MonoBehaviour
{
public float ZoomMax;
public float ZoomMin;
public float Sensitivity = 0.0045f;
public Transform chgObj;
public Transform touchDummyA;
public Transform touchDummyB;
private void Update()
{
PinchRotate();
PinchZoom();
PinchPos();
}
private void PinchPos()
{
float dist = Vector3.Distance(touchDummyB.position, touchDummyA.position) * Sensitivity;
//Debug.Log(dist);
if (dist < 1.5f)
{
var pos = Vector3.Lerp(touchDummyA.position, touchDummyB.position, 0.5f);
chgObj.position = pos;
}
}
private void PinchZoom()
{
float dist = Vector3.Distance(touchDummyB.position, touchDummyA.position);
dist *= Sensitivity;
dist = Mathf.Clamp(dist, ZoomMin, ZoomMax);
//Debug.Log(dist);
chgObj.localScale = new Vector3(dist, dist, dist);
}
private Vector3 currPosA;
private Vector3 currPosB;
private Vector3 prevPosA;
private Vector3 prevPosB;
private void PinchRotate()
{
currPosA = touchDummyA.position;
currPosB = touchDummyB.position;
float angle = Vector3.SignedAngle(currPosA - currPosB,
prevPosA - prevPosB,
chgObj.transform.forward);
//Debug.Log(angle);
chgObj.transform.RotateAround(chgObj.transform.position, -chgObj.transform.forward, angle);
prevPosA = currPosA;
prevPosB = currPosB;
}
}
728x90
반응형
'Unity > 유니티 개발' 카테고리의 다른 글
[유니티] OpenCV+ Face Detection (2) | 2021.09.24 |
---|---|
[유니티] 다수의 UI 캔버스 관리하기 (2) | 2021.09.16 |
유니티 깃헙 연동해서 팀프로젝트 하기 feat. markDown글쓰기 (0) | 2021.08.24 |
screenToWorldPoint 마우스 컨트롤 위치로 gameobject움직이기 (0) | 2021.08.06 |
sceneLoader (0) | 2021.03.10 |
Comments