1100001001 писал(а):Накидал небольшой
пример, надеюсь я тебя правильно понял.
Огромное спасибо что заморочились и сделали целый проект, но к сожаленю я в нем не разобрался... У меня у самого получилось НО проблема встала с включением анимации. То есть я создавал 2д сценку, в ней есть спрайт и анимации в разные направление, так же делал blend tree дабы не делать целые лабиринты ну и вот такой вот код. В том же бленд трее, я соединил АЙДЛ и ВОЛК деревья, сделал бул параметр чтобы если отпускаешь кнопки, значение становилось false и герой останавливался и включалась анимация АЙДЛ, соответственно если жмешь кнопки, nо айдл должна была всего лишь замениться на волк. Как бы я не пытался добавить переход в этот код, ничего не работало. То есть герой вертится за мышкой, меняется все как надо но когда начинаешь идти то как была айдл анимация так и остается. Можете пожалуйста помочь добавить переход? Либо может вообще как то по другому добавить изменение спрайтов.
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AimAtMouse : MonoBehaviour
{
public Transform myTrasnform;
Animator anim;
public float movingSpeed;
private void Start()
{
anim = GetComponent<Animator>();
}
void Update()
{
Aiming();
}
public Transform Aiming()
{
// convert mouse position to world position
Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
// get the difference vector between mouse position and character position
Vector3 diff = mousePos - myTrasnform.position;
// calculate the angle between them
float angleBetween = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
// add 22.5 degrees to the angle just to make it easier to calculate which frame should be shown
angleBetween += 22.5f;
// limit the degree between 0-360
angleBetween %= 360;
if (angleBetween < 0)
angleBetween += 360;
// find the frame and show it
int frameIndex = (int)angleBetween / 45;
anim.SetFloat("x", frameIndex);
return transform;
}
}