- Home /
Question by
Dvionst · Apr 11, 2016 at 07:34 AM ·
2dtouchflickeringmathf.clampedge
Flicker while detecting edge of screen with Mathf.clamp
Hi guys, im stucking for long hours to find this solution.. the object is always flickering when moved to the edge x (left and right).. moving to top and bottom are working well.. this is the code..
But there are some details you needed to know..
Clamp Min and max are configured in Start()
UpdateMovement is called on Update()
Thank you for your help
void Start(){
m_clampMinX = Camera.main.ScreenToWorldPoint (new Vector2 (0 + clampMarginMinX, 0)).x;
m_clampMaxX = Camera.main.ScreenToWorldPoint (new Vector2 (Screen.width - clampMarginMaxX, 0)).x;
m_clampMinY = Camera.main.ScreenToWorldPoint (new Vector2 (0, 0 + clampMarginMinY)).y;
m_clampMaxY = Camera.main.ScreenToWorldPoint (new Vector2 (0, Screen.height + clampMarginMaxY)).y;
}
// The clamp margins
public float
clampMarginMinX = 0.0f,
clampMarginMaxX = 0.0f,
clampMarginMinY = 0.0f,
clampMarginMaxY = 0.0f;
// The minimum and maximum values which the object can go
private float
m_clampMinX,
m_clampMaxX,
m_clampMinY,
m_clampMaxY;
void UpdateMovement()
{
foreach (Touch touch in Input.touches)
{
switch (touch.phase)
{
//When just touch
case TouchPhase.Began:
//detect touch hit the collider in player or not
touchBegin = Camera.main.ScreenToWorldPoint (Input.mousePosition);
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction);
if(hit != null && hit.collider != null){
if (hit.collider.gameObject.tag.Equals("Player")) {
gameObjectTodrag = hit.collider.gameObject;
GOcenter = gameObjectTodrag.transform.position;
touchPosition = Camera.main.ScreenToWorldPoint (Input.mousePosition);
offset = touchPosition - GOcenter;
draggingMode = true;
}
}
break;
case TouchPhase.Canceled:
animator.SetInteger (DIRECTION, 0);
break;
case TouchPhase.Stationary:
animator.SetInteger (DIRECTION, 0);
break;
case TouchPhase.Moved:
if (draggingMode)
{
touchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (touchBegin.x > touchPosition.x) {
animator.SetInteger (DIRECTION, 2);
} else if (touchBegin.x < touchPosition.x) {
animator.SetInteger (DIRECTION, 1);
}
touchBegin = touchPosition;
newGOCenter = touchPosition - offset;
gameObjectTodrag.transform.position = new Vector3 (
Mathf.Clamp (newGOCenter.x, m_clampMinX, m_clampMaxX),
Mathf.Clamp (newGOCenter.y, m_clampMinY, m_clampMaxY),
GOcenter.z);
}
break;
case TouchPhase.Ended:
animator.SetInteger (DIRECTION, 0);
draggingMode = false;
break;
}
}
}
s
Comment
Your answer
Follow this Question
Related Questions
Finding the centre of two touches 2 Answers
Stop Moving When Not Touching Screen? 1 Answer
How can I find on which side of an EdgeCollider2D a collision takes place? 1 Answer
Shoot Bullet At Touch Position : 2D 1 Answer
why is my exported apk has some kind of difference with the editor, editor+unity remote 0 Answers