Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 09.02.2013, 04:39   #1
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Управление wasd

У меня вот есть код
using UnityEngine;
 
public class 
Player MonoBehaviour
{
    public 
float moveSpeed 9;
    public 
float turnSpeed 90;
 
    private 
CharacterController _controller;
    private 
Transform _thisTransform;
 
    public 
void Start()
    {
        
_controller GetComponent<CharacterController>();
        
_thisTransform transform;
    }
 
    public 
void FixedUpdate()
    {
        
_controller.Move(_thisTransform.forward moveSpeed Time.deltaTime Input.GetAxis("Vertical") +
                        
Vector3.down 10.0f Time.deltaTime);
        
Quaternion rot Quaternion.AngleAxis(
            
turnSpeed Time.deltaTime Input.GetAxis("Horizontal"), Vector3.up);
        
_thisTransform.rotation *= rot;
    }

это управление объктом при нажатию стрелочек и w a s d..
Как правильно сделать что бы можна было отдельно например управлять стрелочками или буквами ?
(Offline)
 
Ответить с цитированием
Старый 09.02.2013, 12:13   #2
seaman
Знающий
 
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений
(для 180 пользователей)
Ответ: Управление wasd

Вместо Input.GetAxis использовать Input.GetKey
(Offline)
 
Ответить с цитированием
Старый 09.02.2013, 13:17   #3
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Ответ: Управление wasd

пожалуйста измените мне правильно код на управление букв wasd, а то что то я вроде и правильно сделал но ошибок море
(Offline)
 
Ответить с цитированием
Старый 09.02.2013, 13:34   #4
seaman
Знающий
 
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений
(для 180 пользователей)
Ответ: Управление wasd

Может кто-то и выложит. Я предпочитаю смотреть ваш код, указывать ошибки и методы их исправления. Так что советую выложить код и ошибки.
Ну а в дальнейшем - читать что написано в ошибках и пытаться разобраться как исправить.
(Offline)
 
Ответить с цитированием
Старый 09.02.2013, 13:45   #5
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Ответ: Управление wasd

Вот я думаю будет нормально.
Управление идет из зазначеных клавиш, в скрипте не нужно назначать, все только при присваивании.
Файл желательно назвать PlayerMovement, и все будет работать.
using UnityEngine;
using System.Collections;

[
RequireComponent typeofCharacterController ))]
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.GetKeygoForward )) _controller.SimpleMove(_myTransform.TransformDirectionVector3.forward ) * moveSpeed);
                 if( 
Input.GetKeygoBack )) _controller.SimpleMove(_myTransform.TransformDirectionVector3.forward ) * -backSpeed);
         }
         
         private 
void Strafe (){
                 if( 
Input.GetKeygoLeft )) _controller.SimpleMove(_myTransform.TransformDirectionVector3.right ) * -strafeSpeed);
                 if( 
Input.GetKeygoRight )) _controller.SimpleMove(_myTransform.TransformDirectionVector3.right ) * strafeSpeed);
         }

это только управление от третего лица.
Камера нге будет поворачиваться, щас напишу, по любому кому то пригодиться
(Offline)
 
Ответить с цитированием
Старый 09.02.2013, 14:07   #6
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Ответ: Управление wasd

камера вот такая, я нашел
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.LookAttarget );
                 }
     }
         
         
void Update (){
                 if( 
Input.GetMouseButtonDown)){
                         
_camButtonDown true;
                 }
                 if( 
Input.GetMouseButtonUp)){
                         
_camButtonDown false;
                 }
         }
                 
         
void LateUpdate () {
                 if(
_camButtonDown ){
                         if( 
target != null ){
                                 
_x += Input.GetAxis"Mouse X" ) * xSpeed 0.02f;
                                 
Quaternion targetRotation Quaternion.Euler0_x);      
                                 
target.rotation targetRotation;
                         }
                 }
         }
         
         
         

(Offline)
 
Ответить с цитированием
Старый 09.02.2013, 14:09   #7
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Ответ: Управление wasd

и так можна
using UnityEngine;
using System.Collections;
[
AddComponentMenu("Camera-Control/Mouse Look")]
public class 
MouseLook MonoBehaviour {

    public 
enum RotationAxes MouseXAndY 0MouseX 1MouseY }
    public 
RotationAxes axes RotationAxes.MouseXAndY;
    public 
float sensitivityX 15F;
    public 
float sensitivityY 15F;

    public 
float minimumX = -360F;
    public 
float maximumX 360F;

    public 
float minimumY = -60F;
    public 
float maximumY 60F;

    
float rotationY 0F;

    
void Update ()
    {
        if (
axes == RotationAxes.MouseXAndY)
        {
            
float rotationX transform.localEulerAngles.Input.GetAxis("Mouse X") * sensitivityX;
            
            
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
            
rotationY Mathf.Clamp (rotationYminimumYmaximumY);
            
            
transform.localEulerAngles = new Vector3(-rotationYrotationX0);
        }
        else if (
axes == RotationAxes.MouseX)
        {
            
transform.Rotate(0Input.GetAxis("Mouse X") * sensitivityX0);
        }
        else
        {
            
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
            
rotationY Mathf.Clamp (rotationYminimumYmaximumY);
            
            
transform.localEulerAngles = new Vector3(-rotationYtransform.localEulerAngles.y0);
        }
    }
    
    
void Start ()
    {
        if (
rigidbody)
            
rigidbody.freezeRotation true;
    }

(Offline)
 
Ответить с цитированием
Старый 12.02.2013, 01:30   #8
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Ответ: Управление wasd

У меня такой весьма интересный вопрос
В своей игре можна использывать все виды языка встроеных unity, ну только в правильном направлении?
(Offline)
 
Ответить с цитированием
Старый 12.02.2013, 09:04   #9
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Управление wasd

Не вижу смысла в использовании всех языков, разве что лень переписать имеющийся скрипт на свой язык.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 12.02.2013, 22:51   #10
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Ответ: Управление wasd

аага, лень... это про меня
(Offline)
 
Ответить с цитированием
Старый 17.02.2013, 13:02   #11
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Ответ: Управление wasd

Как здесь правильно сделать что когда нажимаешь налево и вправо игрок и сам поворачивался?
[RequireComponent typeofCharacterController ))] 
public class 
moves 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.GetKeygoForward )) _controller.SimpleMove(_myTransform.TransformDirectionVector3.forward ) * moveSpeed); 
                 if( 
Input.GetKeygoBack )) _controller.SimpleMove(_myTransform.TransformDirectionVector3.forward ) * -backSpeed); 
         } 
          
         private 
void Strafe (){ 
                 if( 
Input.GetKeygoLeft )) _controller.SimpleMove(_myTransform.TransformDirectionVector3.right ) * -strafeSpeed); 
                 if( 
Input.GetKeygoRight )) _controller.SimpleMove(_myTransform.TransformDirectionVector3.right ) * strafeSpeed); 
         } 

(Offline)
 
Ответить с цитированием
Старый 17.02.2013, 17:54   #12
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Управление wasd

Никогда не понимал зачем это _myTransform = transform;
И это зачем?
goForward = "w";  
goBack = "s";  
goLeft = "a";  
goRight = "d";
В Input.GetKey передавай KeyCode...

Как здесь правильно сделать что когда нажимаешь налево и вправо игрок и сам поворачивался?
Вращай transform при нажатии нужных клавиш.
(Offline)
 
Ответить с цитированием
Старый 17.02.2013, 21:56   #13
seaman
Знающий
 
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений
(для 180 пользователей)
Ответ: Управление wasd

зачем это _myTransform = transform;
Это кеширование. Когда берешь transform это то же самое что GetComponent. А это затратная по времени функция. В таких простых скриптах ускорения может быть не заметно, но делать так - хороший тон.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 07:35.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com