forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Управление wasd (http://forum.boolean.name/showthread.php?t=17854)

SGREED 09.02.2013 04:39

Управление wasd
 
У меня вот есть код
PHP код:

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..
Как правильно сделать что бы можна было отдельно например управлять стрелочками или буквами ? :cool:

seaman 09.02.2013 12:13

Ответ: Управление wasd
 
Вместо Input.GetAxis использовать Input.GetKey

SGREED 09.02.2013 13:17

Ответ: Управление wasd
 
пожалуйста измените мне правильно код на управление букв wasd, а то что то я вроде и правильно сделал но ошибок море :''((

seaman 09.02.2013 13:34

Ответ: Управление wasd
 
Может кто-то и выложит. Я предпочитаю смотреть ваш код, указывать ошибки и методы их исправления. Так что советую выложить код и ошибки.
Ну а в дальнейшем - читать что написано в ошибках и пытаться разобраться как исправить.

SGREED 09.02.2013 13:45

Ответ: Управление wasd
 
Вот я думаю будет нормально.
Управление идет из зазначеных клавиш, в скрипте не нужно назначать, все только при присваивании.
Файл желательно назвать PlayerMovement, и все будет работать.
PHP код:

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);
         }
} 

это только управление от третего лица.
Камера нге будет поворачиваться, щас напишу, по любому кому то пригодиться :)

SGREED 09.02.2013 14:07

Ответ: Управление wasd
 
камера вот такая, я нашел
PHP код:

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;
                         }
                 }
         }
         
         
         
} 


SGREED 09.02.2013 14:09

Ответ: Управление wasd
 
и так можна
PHP код:

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;
    }
} 


SGREED 12.02.2013 01:30

Ответ: Управление wasd
 
У меня такой весьма интересный вопрос :)
В своей игре можна использывать все виды языка встроеных unity, ну только в правильном направлении?

pax 12.02.2013 09:04

Ответ: Управление wasd
 
Не вижу смысла в использовании всех языков, разве что лень переписать имеющийся скрипт на свой язык.

SGREED 12.02.2013 22:51

Ответ: Управление wasd
 
:-D аага, лень... это про меня :-D

SGREED 17.02.2013 13:02

Ответ: Управление wasd
 
Как здесь правильно сделать что когда нажимаешь налево и вправо игрок и сам поворачивался?
PHP код:

[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); 
         } 
} 


WISHMASTER35 17.02.2013 17:54

Ответ: Управление wasd
 
Никогда не понимал зачем это _myTransform = transform;
И это зачем?
Код:

goForward = "w"; 
goBack = "s"; 
goLeft = "a"; 
goRight = "d";

В Input.GetKey передавай KeyCode...

Цитата:

Как здесь правильно сделать что когда нажимаешь налево и вправо игрок и сам поворачивался?
Вращай transform при нажатии нужных клавиш.

seaman 17.02.2013 21:56

Ответ: Управление wasd
 
Цитата:

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


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot