Проверка на движение мобильного контроллера - Форум Игроделов
Пт, 17 Май 2024, 06:30 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Проверка на движение мобильного контроллера
Проверка на движение мобильного контроллера
dostalitionДата: Ср, 21 Май 2014, 10:09 | Сообщение # 1
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Подскажите, как написать проверку на движение в мобильном контроллере, использующем СС ... Раньше проверял так
Код
if (character.isGrounded && Input.GetButton("Vertical"))
    if (character.isGrounded && Input.GetButton("Horizontal"))
, но это просто проверка на нажатие клавишь, а как отслеживать само передвижение ?
 
СообщениеПодскажите, как написать проверку на движение в мобильном контроллере, использующем СС ... Раньше проверял так
Код
if (character.isGrounded && Input.GetButton("Vertical"))
    if (character.isGrounded && Input.GetButton("Horizontal"))
, но это просто проверка на нажатие клавишь, а как отслеживать само передвижение ?

Автор - dostalition
Дата добавления - 21 Май 2014 в 10:09
AltairДата: Ср, 21 Май 2014, 12:37 | Сообщение # 2
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
dostalition, через джостик,Import Assets -> Standart Assets(Mobile)
Там найдёшь всё что тебе нужно
 
Сообщениеdostalition, через джостик,Import Assets -> Standart Assets(Mobile)
Там найдёшь всё что тебе нужно

Автор - Altair
Дата добавления - 21 Май 2014 в 12:37
dostalitionДата: Ср, 21 Май 2014, 15:10 | Сообщение # 3
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Всмысле, в скрипте мобильного контроллера FirstPersonControl или именно в скрипте Joystick ?
 
СообщениеВсмысле, в скрипте мобильного контроллера FirstPersonControl или именно в скрипте Joystick ?

Автор - dostalition
Дата добавления - 21 Май 2014 в 15:10
AltairДата: Ср, 21 Май 2014, 19:42 | Сообщение # 4
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
dostalition, в Joystick механика джойстика прописана,а там есть другой скрипт ,скорее всего тот который ты сказал,вот там поищи где берутся значения переменных из скрипта Joystick.

Сообщение отредактировал Altair - Ср, 21 Май 2014, 19:42
 
Сообщениеdostalition, в Joystick механика джойстика прописана,а там есть другой скрипт ,скорее всего тот который ты сказал,вот там поищи где берутся значения переменных из скрипта Joystick.

Автор - Altair
Дата добавления - 21 Май 2014 в 19:42
dostalitionДата: Ср, 21 Май 2014, 21:29 | Сообщение # 5
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
Не подскажешь, где контретно ?
Код
#pragma strict

@script RequireComponent( CharacterController )

// This script must be attached to a GameObject that has a CharacterController
var moveTouchPad : Joystick;
var rotateTouchPad : Joystick;      // If unassigned, tilt is used

var cameraPivot : Transform;      // The transform used for camera rotation

var forwardSpeed : float = 4;
var backwardSpeed : float = 1;
var sidestepSpeed : float = 1;
var jumpSpeed : float = 8;
var inAirMultiplier : float = 0.25;     // Limiter for ground speed while jumping
var rotationSpeed : Vector2 = Vector2( 50, 25 );    // Camera rotation speed for each axis
var tiltPositiveYAxis = 0.6;
var tiltNegativeYAxis = 0.4;
var tiltXAxisMinimum = 0.1;

private var thisTransform : Transform;
private var character : CharacterController;
private var cameraVelocity : Vector3;
private var velocity : Vector3;      // Used for continuing momentum while in air
private var canJump = true;

static var isGround : boolean;

function Start()
{
  // Cache component lookup at startup instead of doing this every frame   
  thisTransform = GetComponent( Transform );
  character = GetComponent( CharacterController );  

  // Move the character to the correct start position in the level, if one exists
  var spawn = GameObject.Find( "PlayerSpawn" );
  if ( spawn )
   thisTransform.position = spawn.transform.position;
}

function OnEndGame()
{
  // Disable joystick when the game ends  
  moveTouchPad.Disable();
   
  if ( rotateTouchPad )
   rotateTouchPad.Disable();  

  // Don't allow any more control changes when the game ends
  this.enabled = false;
}

function Update()
{
  var movement = thisTransform.TransformDirection( Vector3( moveTouchPad.position.x, 0, moveTouchPad.position.y ) );

  // We only want horizontal movement
  movement.y = 0;
  movement.Normalize();

  // Apply movement from move joystick
  var absJoyPos = Vector2( Mathf.Abs( moveTouchPad.position.x ), Mathf.Abs( moveTouchPad.position.y ) );  
  if ( absJoyPos.y > absJoyPos.x )
  {
   if ( moveTouchPad.position.y > 0 )
    movement *= forwardSpeed * absJoyPos.y;
   else
    movement *= backwardSpeed * absJoyPos.y;
  }
  else
   movement *= sidestepSpeed * absJoyPos.x;   
   
  // Check for jump
  if ( character.isGrounded )
  {   
   
      isGround = true;
   
   var jump = false;
   var touchPad : Joystick;
   if ( rotateTouchPad )
    touchPad = rotateTouchPad;
   else
    touchPad = moveTouchPad;
   
   if ( !touchPad.IsFingerDown() )
    canJump = true;
    
//   if ( canJump && touchPad.tapCount >= 2 )
      if ( canJump && Jump_Button.Jump_On )///////////////////////////
    {
    jump = true;
    canJump = false;
    }  
    
   if ( jump )
   {
    // Apply the current movement to launch velocity   
    velocity = character.velocity;
    velocity.y = jumpSpeed;  
   }
  }
  else
  {    
   // Apply gravity to our velocity to diminish it over time
   velocity.y += Physics.gravity.y * Time.deltaTime;
      
   // Adjust additional movement while in-air
   movement.x *= inAirMultiplier;
   movement.z *= inAirMultiplier;
  }
    
  movement += velocity;  
  movement += Physics.gravity;
  movement *= Time.deltaTime;
   
  // Actually move the character  
  character.Move( movement );
   
  if ( character.isGrounded )
   // Remove any persistent velocity after landing  
   velocity = Vector3.zero;
   
  // Apply rotation from rotation joystick
  if ( character.isGrounded )
  {
   var camRotation = Vector2.zero;
    
   if ( rotateTouchPad )
    camRotation = rotateTouchPad.position;
   else
   {
    // Use tilt instead
//   print( iPhoneInput.acceleration );
    var acceleration = Input.acceleration;
    var absTiltX = Mathf.Abs( acceleration.x );
    if ( acceleration.z < 0 && acceleration.x < 0 )
    {
     if ( absTiltX >= tiltPositiveYAxis )
      camRotation.y = (absTiltX - tiltPositiveYAxis) / (1 - tiltPositiveYAxis);
     else if ( absTiltX <= tiltNegativeYAxis )
      camRotation.y = -( tiltNegativeYAxis - absTiltX) / tiltNegativeYAxis;
    }
     
    if ( Mathf.Abs( acceleration.y ) >= tiltXAxisMinimum )
     camRotation.x = -(acceleration.y - tiltXAxisMinimum) / (1 - tiltXAxisMinimum);
   }
    
   camRotation.x *= rotationSpeed.x;
   camRotation.y *= rotationSpeed.y;
   camRotation *= Time.deltaTime;
    
   // Rotate the character around world-y using x-axis of joystick
   thisTransform.Rotate( 0, camRotation.x, 0, Space.World );
    
   // Rotate only the camera with y-axis input
   cameraPivot.Rotate( -camRotation.y, 0, 0 );
  }
}

Добавлено (21 Май 2014, 21:29)
---------------------------------------------
По сути, как Я понимаю, Мне нужно ставить в условие изменение координат контроллера по Х и Y, и желательно ещё и с зависимостью от скорости изменения, т.к. хочу прилепить анимацию движения камеры при ходьбе и беге .... Я знаю как проверить, изменилась ли позиция относительно статичного объекта, а как с динамикой быть не пойму ....

 
СообщениеНе подскажешь, где контретно ?
Код
#pragma strict

@script RequireComponent( CharacterController )

// This script must be attached to a GameObject that has a CharacterController
var moveTouchPad : Joystick;
var rotateTouchPad : Joystick;      // If unassigned, tilt is used

var cameraPivot : Transform;      // The transform used for camera rotation

var forwardSpeed : float = 4;
var backwardSpeed : float = 1;
var sidestepSpeed : float = 1;
var jumpSpeed : float = 8;
var inAirMultiplier : float = 0.25;     // Limiter for ground speed while jumping
var rotationSpeed : Vector2 = Vector2( 50, 25 );    // Camera rotation speed for each axis
var tiltPositiveYAxis = 0.6;
var tiltNegativeYAxis = 0.4;
var tiltXAxisMinimum = 0.1;

private var thisTransform : Transform;
private var character : CharacterController;
private var cameraVelocity : Vector3;
private var velocity : Vector3;      // Used for continuing momentum while in air
private var canJump = true;

static var isGround : boolean;

function Start()
{
  // Cache component lookup at startup instead of doing this every frame   
  thisTransform = GetComponent( Transform );
  character = GetComponent( CharacterController );  

  // Move the character to the correct start position in the level, if one exists
  var spawn = GameObject.Find( "PlayerSpawn" );
  if ( spawn )
   thisTransform.position = spawn.transform.position;
}

function OnEndGame()
{
  // Disable joystick when the game ends  
  moveTouchPad.Disable();
   
  if ( rotateTouchPad )
   rotateTouchPad.Disable();  

  // Don't allow any more control changes when the game ends
  this.enabled = false;
}

function Update()
{
  var movement = thisTransform.TransformDirection( Vector3( moveTouchPad.position.x, 0, moveTouchPad.position.y ) );

  // We only want horizontal movement
  movement.y = 0;
  movement.Normalize();

  // Apply movement from move joystick
  var absJoyPos = Vector2( Mathf.Abs( moveTouchPad.position.x ), Mathf.Abs( moveTouchPad.position.y ) );  
  if ( absJoyPos.y > absJoyPos.x )
  {
   if ( moveTouchPad.position.y > 0 )
    movement *= forwardSpeed * absJoyPos.y;
   else
    movement *= backwardSpeed * absJoyPos.y;
  }
  else
   movement *= sidestepSpeed * absJoyPos.x;   
   
  // Check for jump
  if ( character.isGrounded )
  {   
   
      isGround = true;
   
   var jump = false;
   var touchPad : Joystick;
   if ( rotateTouchPad )
    touchPad = rotateTouchPad;
   else
    touchPad = moveTouchPad;
   
   if ( !touchPad.IsFingerDown() )
    canJump = true;
    
//   if ( canJump && touchPad.tapCount >= 2 )
      if ( canJump && Jump_Button.Jump_On )///////////////////////////
    {
    jump = true;
    canJump = false;
    }  
    
   if ( jump )
   {
    // Apply the current movement to launch velocity   
    velocity = character.velocity;
    velocity.y = jumpSpeed;  
   }
  }
  else
  {    
   // Apply gravity to our velocity to diminish it over time
   velocity.y += Physics.gravity.y * Time.deltaTime;
      
   // Adjust additional movement while in-air
   movement.x *= inAirMultiplier;
   movement.z *= inAirMultiplier;
  }
    
  movement += velocity;  
  movement += Physics.gravity;
  movement *= Time.deltaTime;
   
  // Actually move the character  
  character.Move( movement );
   
  if ( character.isGrounded )
   // Remove any persistent velocity after landing  
   velocity = Vector3.zero;
   
  // Apply rotation from rotation joystick
  if ( character.isGrounded )
  {
   var camRotation = Vector2.zero;
    
   if ( rotateTouchPad )
    camRotation = rotateTouchPad.position;
   else
   {
    // Use tilt instead
//   print( iPhoneInput.acceleration );
    var acceleration = Input.acceleration;
    var absTiltX = Mathf.Abs( acceleration.x );
    if ( acceleration.z < 0 && acceleration.x < 0 )
    {
     if ( absTiltX >= tiltPositiveYAxis )
      camRotation.y = (absTiltX - tiltPositiveYAxis) / (1 - tiltPositiveYAxis);
     else if ( absTiltX <= tiltNegativeYAxis )
      camRotation.y = -( tiltNegativeYAxis - absTiltX) / tiltNegativeYAxis;
    }
     
    if ( Mathf.Abs( acceleration.y ) >= tiltXAxisMinimum )
     camRotation.x = -(acceleration.y - tiltXAxisMinimum) / (1 - tiltXAxisMinimum);
   }
    
   camRotation.x *= rotationSpeed.x;
   camRotation.y *= rotationSpeed.y;
   camRotation *= Time.deltaTime;
    
   // Rotate the character around world-y using x-axis of joystick
   thisTransform.Rotate( 0, camRotation.x, 0, Space.World );
    
   // Rotate only the camera with y-axis input
   cameraPivot.Rotate( -camRotation.y, 0, 0 );
  }
}

Добавлено (21 Май 2014, 21:29)
---------------------------------------------
По сути, как Я понимаю, Мне нужно ставить в условие изменение координат контроллера по Х и Y, и желательно ещё и с зависимостью от скорости изменения, т.к. хочу прилепить анимацию движения камеры при ходьбе и беге .... Я знаю как проверить, изменилась ли позиция относительно статичного объекта, а как с динамикой быть не пойму ....


Автор - dostalition
Дата добавления - 21 Май 2014 в 21:29
AltairДата: Ср, 21 Май 2014, 23:51 | Сообщение # 6
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
Цитата dostalition ()
Не подскажешь, где контретно ?

Тебе нужна переменная movement) там рассчитывается передвижение
 
Сообщение
Цитата dostalition ()
Не подскажешь, где контретно ?

Тебе нужна переменная movement) там рассчитывается передвижение

Автор - Altair
Дата добавления - 21 Май 2014 в 23:51
dostalitionДата: Пт, 23 Май 2014, 10:00 | Сообщение # 7
 
Сообщений: 155
Награды: 0
Репутация: 9
Статус: Offline
movement , как Я понял - это направление движения ... Делаю анимацию камеры ... Пока написал так
Код
if(character.isGrounded && character.velocity.magnitude > ifSpWalk) cameraPref.animation.Play();
Но есть два вопроса ... Как проверять движение только по х и z ? Как сделать зависимость скорости анимации от скорости движения ?
 
Сообщениеmovement , как Я понял - это направление движения ... Делаю анимацию камеры ... Пока написал так
Код
if(character.isGrounded && character.velocity.magnitude > ifSpWalk) cameraPref.animation.Play();
Но есть два вопроса ... Как проверять движение только по х и z ? Как сделать зависимость скорости анимации от скорости движения ?

Автор - dostalition
Дата добавления - 23 Май 2014 в 10:00
AltairДата: Пт, 23 Май 2014, 14:19 | Сообщение # 8
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
character.velocity.magnitude-это скорость движения
Как проверять движение только по х и z -- да просто..берёшь вектор и от туда забираешь только значения икса и игрика
типо
movoment.x,movnment.z да и всё
 
Сообщениеcharacter.velocity.magnitude-это скорость движения
Как проверять движение только по х и z -- да просто..берёшь вектор и от туда забираешь только значения икса и игрика
типо
movoment.x,movnment.z да и всё

Автор - Altair
Дата добавления - 23 Май 2014 в 14:19
Форум Игроделов » UNITY3D » СКРИПТИНГ » Проверка на движение мобильного контроллера
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024