You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
2.3 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AutoFlip : MonoBehaviour {
[SerializeField]
bool autoFlipX = false;
[SerializeField]
bool autoFlipY = false;
[SerializeField]
Camera referenceCamera;
Vector2 screenPointOld;
Vector2 direction = Vector2.zero;
Vector2 directionOld = Vector2.zero;
// Use this for initialization
void Start () {
if (referenceCamera == null)
referenceCamera = FindObjectOfType<Canvas>().GetComponent<Canvas>().worldCamera;
screenPointOld = referenceCamera.WorldToScreenPoint(transform.position);
}
int flipCounterX = 0;
int flipCounterY = 0;
// Update is called once per frame
void Update () {
if (referenceCamera == null)
return;
Vector2 screenPoint = referenceCamera.WorldToScreenPoint(transform.position);
direction = screenPoint - screenPointOld;
if (direction.x == 0)
direction.x = directionOld.x;
if (direction.y == 0)
direction.y = directionOld.y;
Quaternion rotation = transform.rotation;
{ //flip X
if (direction.x * directionOld.x < 0)
{
flipCounterX = 1;
}
if (direction.x * directionOld.x > 0 && flipCounterX != 0)
{
flipCounterX += 1;
}
if (autoFlipX && flipCounterX >= 4)
{
rotation *= Quaternion.Euler(0, 180, 0);
flipCounterX = 0;
}
}
{ //flip Y
if (direction.y * directionOld.y < 0)
{
flipCounterY = 1;
}
if (direction.y * directionOld.y > 0 && flipCounterY != 0)
{
flipCounterY += 1;
}
if (autoFlipY && flipCounterY >= 4)
{
rotation *= Quaternion.Euler(180, 0, 0);
flipCounterY = 0;
}
}
transform.rotation = rotation;
screenPointOld = screenPoint;
directionOld = direction;
/*
if (direction.x != 0)
directionOld.x = direction.x;
if (direction.y != 0)
directionOld.y = direction.y;
*/
}
}