Jlovenpk1 Дата: Воскресенье, 03 Апреля 2016, 17:37 | Сообщение # 1   
 
участник
Сейчас нет на сайте 
 
 Старый код в рпг стиле, работает все отлично, добавил свои плюху(как уклонение). Персонаж управляется через transofrm.position и при встречи гор он по ним ходит, как ниндзя, при встречи объектов проходит сквозь них. Дали совет, что бы персонаж не проходил через стены, использовать CC.MOVE(CharacterController.Move(Vector 3);  Управление в старом виде, идет через Ray, Raycast получаем данные куда тыкнули кнопкой мыши и отправляем туда нашу модель, как только достигли таргета, модель останавливается. Вопрос, как это реализовать через CC.Move, т.к. p.s Попробовал я использовать Ray и при наведение курсором мыши на объект он удаляется, в итоге у меня удаляется террейн и не более :D привожу старый код:
Код
ing UnityEngine; using System.Collections; public class MoveRPG : MonoBehaviour {     public float stopStart = 1.5f, speed = 5f, rotationSpeed = 100f, heightPlayer = 1f;     private float mag, angleToTarget;     private Ray ray;     private RaycastHit hit;     private Vector3 dir;     private Vector3 target = new Vector3();     private Vector3 lastTarget = new Vector3();     public int speedrotation = 2;     public Animation anima;     private CharacterController controller;               private bool walk;     public Transform Target;     private void Update()     {         controller = GetComponent<CharacterController>();         if (Input.GetMouseButton(0))         {             ray = UnityEngine.Camera.main.ScreenPointToRay(Input.mousePosition);          if (Physics.Raycast(ray, out hit, 10000.0f))          {               target = hit.point;            }         }         LookAtThis();         MoveTo();         Dodge();     }     private void CalculateAngle(Vector3 temp)     {         dir = new Vector3(temp.x, transform.position.y, temp.z) - transform.position;         angleToTarget = Vector3.Angle(dir, transform.forward);     }     private void LookAtThis()     {                      if (target != lastTarget)             {                 CalculateAngle(target);                 if (angleToTarget > 3)                     transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(dir), rotationSpeed * UnityEngine.Time.deltaTime);                 //float MouseSens = 2.5f;                 //transform.RotateAround(Target.position, Vector3.up, hor * MouseSens * 300 * Time.deltaTime);                      }     }     private void MoveTo()     {                  if (target != lastTarget)         {             if ((transform.position - target).sqrMagnitude > heightPlayer + 0.1f)             {                 if (!walk)                 {                     Debug.Log("walk");                     anima.Play("Run", PlayMode.StopAll);                     walk = true;                 }                                  mag = (transform.position - target).magnitude;                                  transform.position = Vector3.MoveTowards(transform.position, target, mag > stopStart ? speed * UnityEngine.Time.deltaTime : Mathf.Lerp(speed * 0.5f, speed, mag / stopStart) * UnityEngine.Time.deltaTime);                                  ray = new Ray(transform.position, -Vector3.up);                if (Physics.Raycast(ray, out hit, 10000.0f))               {                     transform.position = new Vector3(transform.position.x, hit.point.y + heightPlayer, transform.position.z);                }             }             else             {                 lastTarget = target;                 if (walk)                 {                     Debug.Log("idle");                     anima.Play("stay", PlayMode.StopAll);                     walk = false;                 }             }         }     }     public void Dodge()     {         if (Input.GetKey("q"))         {             transform.Translate(Vector3.left * Time.deltaTime * 25f);             anima.Play("Def",PlayMode.StopAll);              anima.PlayQueued("stay");             walk = false;                      }         if (Input.GetKey("e"))         {             transform.Translate(Vector3.right * Time.deltaTime * 25f);             anima.Play("Def", PlayMode.StopAll);             anima.PlayQueued("stay");             walk = false;                      }         if (Input.GetKey("1"))         {             anima.Play("Attack1", PlayMode.StopAll);             anima.PlayQueued("stay");             walk = false;         }         if (Input.GetKey("2"))         {             anima.Play("Attack2", PlayMode.StopAll);             anima.PlayQueued("stay");             walk = false;         }     }      }
 
DjanStudio