protected void OnSpriteRendered() { if (Camera.current == null) { return; } CardinalSprite.Direction calculatedDirection = GetCurrentDirection(Camera.current); currentDirection = calculatedDirection; }
void AnimationUpdate() { /* * if (currentDirection != direction.currentDirection) * { * UpdateSprite(); * currentDirection = direction.currentDirection; * } * else if (currentFrame != frame) * { * UpdateSprite(); * currentFrame = frame; * } */ currentDirection = direction.currentDirection; UpdateSprite(); }
//transform.Rotate(0, currentAngle, 0); /* * if (calculatedDirection != currentDirection) * UpdateSprite(calculatedDirection); * } * * protected void UpdateSprite(CardinalSprite.Direction direction) * { * if (!cardinalSprite) return; * if (!spriteRenderer) return; * Sprite s = cardinalSprite.south; * * // Opposite direction: If you camera is south, we see the back of the object, facing north. * switch(direction) * { * case CardinalSprite.Direction.South: * s = cardinalSprite.north; * break; * case CardinalSprite.Direction.SouthEast: * s = cardinalSprite.northWest; * break; * case CardinalSprite.Direction.East: * s = cardinalSprite.west; * break; * case CardinalSprite.Direction.NorthEast: * s = cardinalSprite.southWest; * break; * case CardinalSprite.Direction.North: * break; * case CardinalSprite.Direction.NorthWest: * s = cardinalSprite.southEast; * break; * case CardinalSprite.Direction.West: * s = cardinalSprite.east; * break; * case CardinalSprite.Direction.SouthWest: * s = cardinalSprite.northEast; * break; * } * spriteRenderer.sprite = s; * * currentDirection = direction; * } * */ protected CardinalSprite.Direction GetCurrentDirection(Camera cam) { CardinalSprite.Direction direction = CardinalSprite.Direction.South; Vector3 localSpacePoint = transform.InverseTransformPoint(cam.transform.position); // ONEEIGHTHPI offsets so that our unit circle is rotated. float angle = Mathf.Atan2(localSpacePoint.x, localSpacePoint.z) + ONEEIGTHPI + PI; angle %= TWOPI; angle /= TWOPI; // Opposite direction // If camera is south, we face north direction = (CardinalSprite.Direction)(int)(angle * 8.0f); currentAngle = angle; return(direction); }