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

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

Вернуться   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 ( 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);
         }
} 
это только управление от третего лица.
Камера нге будет поворачиваться, щас напишу, по любому кому то пригодиться
(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.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;
                         }
                 }
         }
         
         
         
} 
(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 = 0, MouseX = 1, MouseY = 2 }
    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.y + Input.GetAxis("Mouse X") * sensitivityX;
            
            
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
            
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
            
            
transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
        }
        else if (
axes == RotationAxes.MouseX)
        {
            
transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
        }
        else
        {
            
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
            
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
            
            
transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
        }
    }
    
    
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 ( typeof( CharacterController ))] 
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.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); 
         } 
} 
(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, время: 22:09.


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