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


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

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



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



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



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, время: 08:07.

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