Game Maker - создание игр | HellRoom Games

Дополнительно: => Вопросы - Ответы => Тема начата: GantZ_Yaka от Август 22, 2013, 08:00:01



Название: Движение персонажа, вопрос по уроку
Отправлено: GantZ_Yaka от Август 22, 2013, 08:00:01
У вас на форуме в уроках по Unity3d есть тема "Unity3D - создание движения персонажа и его анимация! Часть 1 (От третьего лица) ", в которой приведен пример отличного скрипта. т.к. тема старая, решил задатьвопрос не в ней а открыть новую. Вобщем вопрос. Вот скрипт:
Код:
using UnityEngine;
using System.Collections;
public class Move : MonoBehaviour {
public GameObject player;
public int speedRotation = 3;
public int speed = 5;
public AnimationClip anima;
public int jumpSpeed = 50;

void Start () {
  player = (GameObject)this.gameObject;
  animation.AddClip(anima, "animCube");
  }
  void Update(){
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
  {
  player.transform.position += player.transform.forward * speed * Time.deltaTime;
  animation.CrossFade("animCube");
  }
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
  {
  player.transform.position -= player.transform.forward * speed * Time.deltaTime;
  }
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
  {
  player.transform.Rotate(Vector3.down * speedRotation);
  }
  if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
  {
  player.transform.Rotate(Vector3.up * speedRotation);
  }
if (Input.GetKeyDown(KeyCode.Space))
  {
  player.transform.position += player.transform.up * jumpSpeed * Time.deltaTime;
  }
 }
}
как сделать в этом примере вращение плавным и передвижение тоже плавным (сгладить)? Если вывести игру на большой экран то сразу бросается в глаза, как объекты передвигаются и вращаются рывками :(


Название: Re: Движение персонажа, вопрос по уроку
Отправлено: infernal от Октябрь 25, 2013, 20:33:40
Ммм... через transform - плохой вариант, лучше через CharacterController
Код:
CharacterController cc;//Вначале в переменных

cc=this.gameObject.GetComponent<CharacterController>(); //При этом компонент должен висеть на объекте, на том же что и скрипт

 void Update(){
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
  {
 cc.SimpleMove(forward/направление/ * speed);
  }
}
И так во всех условиях клавиш, в самом компоненте CharacterController есть масса настроек, для сглаживания и ограничения движения(читай мануал)

А чем тебе мешает использовать скрипт из StandartAssets?

Добавлено: Октябрь 25, 2013, 20:38:37
А для вращения используй Quaternion(тут тоже используй справку, раздел ScriptingReference)