Kxarog Дата: Пятница, 31 Марта 2017, 14:59 | Сообщение # 1
участник
Сейчас нет на сайте
Здравствуйте, помогите пожалуйста разобраться в данном вопросе. Я написал код движения с помощью мыши и столкнулся с 2 проблемами: 1) персонаж реагирует только если я щелкаю на 3д объекты и только по ним двигается, и собственно вопрос как сделать что бы он реагировал на спрайты? 2) в конце кода я приписал плавное движение к точке, но есть заковырка к точке то он двигается, но никогда ее не достигает, почитал по этому поводу пару статей там говорится что нужно поставить еще проверку на дистанцию, что я собственно и сделал по данному примеру
Код
void Update(){ if(transform.position!=Vector3(50, 0, 0)) { transform.position = Vector3(Mathf.Lerp(0, 50, 5*Time.TimeDelta), 0, 0); }
но результата нет, в чем ошибка и как решить ее? Вот мой код
Код
public class go : MonoBehaviour { private Ray ray; private RaycastHit hit; private Vector3 rot = new Vector2(0, 0, 0); private int speed = 5; void Update () { if (Input.GetMouseButton (0)) { ray = Camera.main.ScreenPointToRay (Input.mousePosition); if (Physics.Raycast (ray, out hit)) // { rot.y = hit.point.y; rot.x = hit.point.x; rot.z = hit.point.z; if (transform.position != rot) //проверка дистанции { transform.position = Vector3.Lerp(transform.position, rot, Time.deltaTime * speed); //плавное движение } } } } }
Хоть никто ничего и не посоветовал нашел решение сам,вот скрипт на будущее, вдруг кто столкнется с подобной проблемой
Код
using System.Collections; using System.Collections.Generic; using UnityEngine; public class servant : MonoBehaviour { private Vector3 positionMove; private int speed = 20; private void Start() { positionMove = transform.position; } private void Update() { Vector2 MP = Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y)); RaycastHit2D hit; if (Input.GetMouseButtonDown(0)) { hit = Physics2D.Raycast(MP, Vector2.up); if (hit) { if (hit.transform.tag == "Finish") { positionMove = UnityEngine.Camera.main.ScreenToWorldPoint (Input.mousePosition); positionMove.z = 0; } } } float moveDelta = (positionMove - transform.position).magnitude; if (moveDelta <= speed * Time.deltaTime) { transform.position = positionMove; return; } Vector3 moveDir = positionMove - transform.position; moveDir.Normalize(); transform.position += moveDir * speed * Time.deltaTime; } }
Сообщение отредактировал Kxarog - Суббота, 01 Апреля 2017, 01:04