Есть проблема с воспроизведением разовой анимации, есть два скрипта: скрипт с анимациями персонажа и функциями для их воспроизведения и скрипт на gui текстуре перемещающий меч в руку и вызывающий функцию воспроизводящую анимацию изъятия (из первого скрипта), но по какой-то причине меч в руку перемещается, а анимация не воспроизводится. Скрипт на gui текстуре:
Код
using UnityEngine; using System.Collections;
public class TakeKatana : MonoBehaviour {
public Texture StartHand; public Texture Pressed; public GameObject HandTransform; public GameObject KatanaBone; public bool KatanaOn; public PlayerAnimator Animator; public bool Taking;
public Joystick Joy; public GameObject PlayerMesh; public AnimationClip Walk; public AnimationClip Run; public AnimationClip Idle; public AnimationClip KatanaTake;
Проблема в том что у меня есть два вида анимации для одинаковых действий, и при нажатии кнопок(в игре на Unity) персонаж будет либо доставать, либо возвращать меч в ножны, но если меч присоединить к руке то он будет присоединён к ней во всех анимациях, изначально меч не присоединён ни к чему. P.S. анимации идут одним куском и режутся на движке.
Здравствуйте, меня интересует один вопрос. У персонажа игры должно быть два вида анимации перемещения: с мечём и без. Если сделать кость меча зависимой от кости руки то меч анимируется всегда. Если делать анимации меча отдельно от анимации тела он не точно следует за рукой. В анимации без меча он должен лежать в ножнах на поясе. Как такое обычно делают?
Здравствуйте, есть проблема с возвращением камеры в оригинальное положение через определённый период времени. Скрипт поворота камеры вокруг объекта:
Код
using UnityEngine; using System.Collections;
public class TouchLook : MonoBehaviour { public Joystick Joystick; private Vector3 Player; public GameObject PlayerTransform; public GameObject Camera; public float sensitivityX = 10.0f; public bool invertX = false;
Переделал не через tag а через имя(а то будет применимо ко всем элементом управления), стоит Circle Collider 2D, сейчас всё попробую и отпишусь, спасибо.
Добавлено (31.07.2014, 14:26) --------------------------------------------- Оказалось что луч не попадает
Добавлено (31.07.2014, 14:53) --------------------------------------------- Получилось решить без RayCast Вот Скрипт:
Код
using UnityEngine; using System.Collections;
public class Joystick : MonoBehaviour { private bool touchfinger; public float speed = 0.1f; public Vector3 center; public float radius;
void Update(){ Vector3 movement = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); Vector3 newPos = transform.position + movement; Vector3 offset = newPos - center; transform.position = center + Vector3.ClampMagnitude(offset, radius);
Проблема с джойстиком, после добавления проверки через Raycast он перестал работать и не могу понять в чём проблема. Объясните пожалуйста в чём проблема. Вот скрипт:
Код
public class Joystick : MonoBehaviour { private Ray ray; private RaycastHit hit; private Transform myTransform; private Touch myTouch; public float speed = 0.1f; public Vector3 center; public float radius;
void Start(){ myTransform = transform; }
void Update(){ Vector3 movement = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); Vector3 newPos = transform.position + movement; Vector3 offset = newPos - center; transform.position = center + Vector3.ClampMagnitude(offset, radius);
Проблема: Есть Joystick управляющий персонажем и скрипт вращающий камеру вокруг персонажа, при использовании Joystick камера начинает вращаться. Вопрос: Как сделать что бы при использовании Joystic камера не вращалась?
Что-то наподобие различных слоёв, или как ограничить область работы скрипта по вращению камеры?
Вот скрипт:
Код
using System.Collections;
[AddComponentMenu("Camera-Control/Touch Look")] public class TouchLook : MonoBehaviour {
public float sensitivityX = 5.0f; public float sensitivityY = 5.0f;
public bool invertX = false; public bool invertY = false;
// Use this for initialization void Start () {
}
// Update is called once per frame void Update () { if (Input.touches.Length > 0) { if (Input.touches[0].phase == TouchPhase.Moved) { Vector2 delta = Input.touches[0].deltaPosition; float rotationZ = delta.x * sensitivityX * Time.deltaTime; rotationZ = invertX ? rotationZ : rotationZ * -1; float rotationX = delta.y * sensitivityY * Time.deltaTime; rotationX = invertY ? rotationX : rotationX * -1;
transform.localEulerAngles += new Vector3(rotationX, rotationZ, 0); } } } }