Мне просто интересно, как бы я это сделал. У меня есть сценарий, в котором игрок следует направлению мыши, но проблема в том, что это 2D-спрайт, поэтому, когда мышь находится прямо вверх или вниз, вы не можете видеть спрайт.
Честно говоря, вся эта проблема началось с того, что я ленился и не хотел анимировать переднюю и заднюю часть.
Я думал об остановке метода LookatMouse, когда положение мыши находится между двумя углами, передним и задним, предотвращая появление спрайта от исчезновения, а затем запуска метода, когда мышь покинула зону, но, как я уже сказал, я не уверен, как это сделать, и был бы благодарен за любую помощь.
Также любые другие идеи, как остановить исчезновение игрока, будут полезны. здорово, я не знаю, как в других играх такое можно сделать.
{
public CharacterController controller;
public float gravity = -9.81f;
private Vector3 velocity;
public float speed = 6f;
public float turnSpeed = 6f;
public TrailRenderer trailRenderer;
public float trailThreshold = 200f; //How fast player needs to spin to enable the trail
private Quaternion prevRotation;
private void Start()
{
prevRotation = transform.rotation;
}
private void Update()
{
if (controller.isGrounded && velocity.y < 0)
{
velocity.y = -2f;
}
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
Vector3 moveDirection = transform.right * horizontal + transform.forward * vertical;
moveDirection.Normalize(); //Consistent movement in all directions
if (moveDirection.magnitude >= 0.1f)
{
controller.Move(moveDirection * speed * Time.deltaTime);
}
Lookatmouse();
// Calculate angular velocity
float angle = Quaternion.Angle(prevRotation, transform.rotation);
float angularVelocity = angle / Time.deltaTime;
// Update previous rotation
prevRotation = transform.rotation;
trailRenderer.enabled = angularVelocity > trailThreshold;
}
void Lookatmouse()
{
Plane playerplane = new Plane(Vector3.up, transform.position);
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
float hitdist;
if (playerplane.Raycast(ray, out hitdist))
{
Vector3 targetpoint = ray.GetPoint(hitdist);
Quaternion targetrotation = Quaternion.LookRotation(targetpoint - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, targetrotation, turnSpeed * Time.deltaTime);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... ound-the-p