Простое управление (вперед, назад, влево, вправо)

Программирование на Юнити.

Простое управление (вперед, назад, влево, вправо)

Сообщение TheDeadHeaD 04 янв 2011, 12:42

1) Как сделать чтобы мой герой двигался вперед, назад, влево, вправо?
2) Как присваивать действие любой клавиши. Напр ЛКМ или кнопке "e"?
TheDeadHeaD
UNец
 
Сообщения: 7
Зарегистрирован: 04 янв 2011, 12:30

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение Pyx 04 янв 2011, 12:46

TheDeadHeaD писал(а):1) Как сделать чтобы мой герой двигался вперед, назад, влево, вправо?
2) Как присваивать действие любой клавиши. Напр ЛКМ или кнопке "e"?

Пройти 3D Platform Tutorial
Pyx
 

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение TheDeadHeaD 04 янв 2011, 12:52

Пройти 3D Platform Tutorial

Это то с роботом? Пройду позже)
Сейчас мне просто нужно простое управление. Напишите как это сделать. Пожалуйста)
TheDeadHeaD
UNец
 
Сообщения: 7
Зарегистрирован: 04 янв 2011, 12:30

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение Pyx 04 янв 2011, 13:40

TheDeadHeaD писал(а):Пройду позже)
Сейчас мне просто нужно простое управление.

Напишу позже.Сейчас лень.
Pyx
 

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение Paul Siberdt 04 янв 2011, 13:57

Сейчас нам нужно чтобы вы прошли туториал. Пожалуйста)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение shutov 04 янв 2011, 15:16

Без туториала вы все равно не поймете и ничему не научитесь, поэтому пройдите его в первую очередь)
Аватара пользователя
shutov
UNITрон
 
Сообщения: 173
Зарегистрирован: 16 ноя 2010, 13:31
Откуда: Ульяновск
  • ICQ

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение TheDeadHeaD 04 янв 2011, 20:27

Напишу позже.Сейчас лень.

Мне не лень. Просто мало времени.

Сейчас нам нужно чтобы вы прошли туториал.

Я скачал папку. Распаковал. Перетащил ее в uniti. Открыл assets> scenes. Открыл префаб thegame и единственное что появилось это точки света ... wtf? Что не так сделал?

Без туториала вы все равно не поймете и ничему не научитесь, поэтому пройдите его в первую очередь)

Adidas: Impossible Is Nothing
TheDeadHeaD
UNец
 
Сообщения: 7
Зарегистрирован: 04 янв 2011, 12:30

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение Hansstudio 05 янв 2011, 00:15

Код перемещения камеры, (почти) как в редакторе. Собран из нескольких частей др. кодов)))
-----
W - вперед
S - назад
A - перемещение влево
D - перемещение вправо
При зажатой ПКМ- ротация вправо/влево/вверх/вниз

var xSpeed = 400.0;
var ySpeed = 400.0;

private var x = 0.0;
private var y = 0.0;

var speed = 15.0;

function Start () {
var angles = transform.eulerAngles;
x = angles.y;
y = angles.x;
}

function Update () {

////////ротация камеры////////
if (Input.GetMouseButton(1)) {
x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;

var rotation = Quaternion.Euler(y, x, 0);
transform.rotation = rotation;
}
var translationV = Input.GetAxis ("Vertical") * speed;
var translationH = Input.GetAxis ("Horizontal") * speed;

translationV *= Time.deltaTime;
translationH *= Time.deltaTime;

//// перемещение камеры//////////
transform.Translate (translationH, 0, translationV);

if(Input.GetKey(KeyCode.LeftShift)){

transform.Translate (10 * translationH, 0, 10 * translationV);
}
}

(если есть ошибки, ногами не пинать, т.к. я сам только учусь!)

p.s. Подскажите, как в рантайме с помощью мыши, производить ротацию объекта? Уже 4 часа туплю.
Аватара пользователя
Hansstudio
UNец
 
Сообщения: 10
Зарегистрирован: 15 мар 2010, 05:31
Откуда: Ташкент

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение Gopher Mao 05 янв 2011, 18:35

Я тоже пока еще новичок.
перемещаюсь так:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

[RequireComponent ( typeof( CharacterController ))]
public class PlayerMovement : MonoBehaviour {
        public float moveSpeed;
        public float backSpeed;
        public float strafeSpeed;
        public string goForward;
        public string goBack;
        public string goLeft;
        public string goRight;
       
        private Transform _myTransform;
        private CharacterController _controller;
       
        public void Awake (){
                _myTransform = transform;
                _controller = GetComponent<CharacterController>();
        }
       
        void Start () {
                moveSpeed = 7.0f;
                backSpeed = moveSpeed / 2;
                strafeSpeed = moveSpeed / 2;
                goForward = "w";
                goBack = "s";
                goLeft = "a";
                goRight = "d";

        }
       
        void Update () {
                Walk();
                Strafe();
        }
       
        private void Walk (){
                if( Input.GetKey( goForward )) _controller.SimpleMove(_myTransform.TransformDirection( Vector3.forward ) * moveSpeed);
                if( Input.GetKey( goBack )) _controller.SimpleMove(_myTransform.TransformDirection( Vector3.forward ) * -backSpeed);
        }
       
        private void Strafe (){
                if( Input.GetKey( goLeft )) _controller.SimpleMove(_myTransform.TransformDirection( Vector3.right ) * -strafeSpeed);
                if( Input.GetKey( goRight )) _controller.SimpleMove(_myTransform.TransformDirection( Vector3.right ) * strafeSpeed);
        }
}
 


+ на камере скрипт чтобы крутить персонажа (вид от третьего лица):
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class PlayerCamera : MonoBehaviour {
        public Transform target;
        public float xSpeed = 250.0f;
             
        private Transform _myTransform;
        private bool _camButtonDown = false;
        private float _x;
       
        void Awake (){
                _myTransform = transform;
        }
       
    void Start () {    
                if( target == null ){
                        Debug.LogWarning( "camera: No target!" );
                }else{
                        _myTransform.LookAt( target );
                }
    }
       
        void Update (){
                if( Input.GetMouseButtonDown( 1 )){
                        _camButtonDown = true;
                }
                if( Input.GetMouseButtonUp( 1 )){
                        _camButtonDown = false;
                }
        }
               
        void LateUpdate () {
                if(_camButtonDown ){
                        if( target != null ){
                                _x += Input.GetAxis( "Mouse X" ) * xSpeed * 0.02f;
                                Quaternion targetRotation = Quaternion.Euler( 0, _x, 0 );      
                                target.rotation = targetRotation;
                        }
                }
        }
       
       
       
}

 

камеру пока что двигаю руками на нужную позицию и леплю к персонажу чтоб она за ним ездила, но вроде как такая система пока устраивает =)
хотелось бы заодно комментариев насколько такая система правильная =)
Gopher Mao
UNец
 
Сообщения: 10
Зарегистрирован: 05 янв 2011, 18:18

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение TheDeadHeaD 05 янв 2011, 19:20

Hansstudio, Gopher Mao, Спасибо вам!
Я для камеры использую этот скрипт:
Синтаксис:
Используется javascript

var target : Transform;

var distance = 10.0;

var height = 5.0;

var heightDamping = 2.0;
var rotationDamping = 3.0;

@script AddComponentMenu("Camera-Control/Smooth Follow")


function LateUpdate () {
       
        if (!target)
                return;
       
        wantedRotationAngle = target.eulerAngles.y;
        wantedHeight = target.position.y + height;
               
        currentRotationAngle = transform.eulerAngles.y;
        currentHeight = transform.position.y;
       
        currentRotationAngle = Mathf.LerpAngle (currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime);

        currentHeight = Mathf.Lerp (currentHeight, wantedHeight, heightDamping * Time.deltaTime);

        currentRotation = Quaternion.Euler (0, currentRotationAngle, 0);
       
        transform.position = target.position;
        transform.position -= currentRotation * Vector3.forward * distance;

        transform.position.y = currentHeight;
       
        transform.LookAt (target);
}
 


Затем в target ставлю игрока)
TheDeadHeaD
UNец
 
Сообщения: 7
Зарегистрирован: 04 янв 2011, 12:30

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение TheDeadHeaD 05 янв 2011, 23:58

Hansstudio, С таким управлением игрок проходит сквозь стены. Я менял управления на другое и все работало нормально.

Gopher Mao, Я не могу присвоить объекту csharp скрипты. Пишет что имя файла не соответствует названию класса который в скрипте. Знаешь в чем проблема?
TheDeadHeaD
UNец
 
Сообщения: 7
Зарегистрирован: 04 янв 2011, 12:30

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение Gopher Mao 06 янв 2011, 00:06

TheDeadHeaD писал(а): Пишет что имя файла не соответствует названию класса который в скрипте. Знаешь в чем проблема?


а у тебя файл PlayerMovement.cs называется?
Gopher Mao
UNец
 
Сообщения: 10
Зарегистрирован: 05 янв 2011, 18:18

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение TheDeadHeaD 06 янв 2011, 00:14

ступил ... не знал что есть разница как называть файл ... спасибо!
TheDeadHeaD
UNец
 
Сообщения: 7
Зарегистрирован: 04 янв 2011, 12:30

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение Gopher Mao 06 янв 2011, 00:20

незачто ;)
Gopher Mao
UNец
 
Сообщения: 10
Зарегистрирован: 05 янв 2011, 18:18

Re: Простое управление (вперед, назад, влево, вправо)

Сообщение Hansstudio 06 янв 2011, 01:10

TheDeadHeaD писал(а):Hansstudio, С таким управлением игрок проходит сквозь стены. Я менял управления на другое и все работало нормально.

Игрок и будет проходить сквозь стены, если использовать мой скрипт. Он, вообще то написан для редактора. Просто в нем есть пример перемещения и ротации.
Аватара пользователя
Hansstudio
UNец
 
Сообщения: 10
Зарегистрирован: 15 мар 2010, 05:31
Откуда: Ташкент

След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4