Вопрос по управлению объектом с помощью мышки - Форум Игроделов
Пт, 17 Май 2024, 05:17 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Вопрос по управлению объектом с помощью мышки (Скрипт есть)
Вопрос по управлению объектом с помощью мышки
AIDENДата: Вс, 13 Июл 2014, 16:20 | Сообщение # 1
Нет аватара
 
Сообщений: 59
Награды: 0
Репутация: 56
Статус: Offline
У меня есть 2 скрипта, один перемещение объекта с помощью мышки :
Код

private var screenPoint : Vector3;
private var offset : Vector3;

function Start () : void {
  originRotation = transform.rotation;
  screenPoint = Camera.main.WorldToScreenPoint(transform.position);
  }

function OnMouseDown () {
  screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);

  offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}

function OnMouseDrag () {
  var curScreenPoint : Vector3= new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);

  var curPosition : Vector3= Camera.main.ScreenToWorldPoint(curScreenPoint);
  transform.position = curPosition;
}


А второй поворот объекта мышкой :
Код

  var speed : float= 10.0f;
  var sensitivity : float= 10.0f;
  private var originRotation : Quaternion;
  private var screenPoint : Vector2;
  private var angle : float= 0.0f;

function Start () {
  originRotation = transform.rotation;
  screenPoint = Camera.main.WorldToScreenPoint(transform.position);
  }

  function Update () {
  if (angle > 359.9f) angle = 0;  
  if (angle < 0) angle = 359.9f;
  var rotate : Quaternion= originRotation * Quaternion.AngleAxis(angle, Vector3.forward);
  transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.deltaTime * speed);
}

  function OnMouseDrag () {
  var directionX : float= 0f;
  var directionY : float= 0f;
  if (Input.mousePosition.x > screenPoint.x && Input.mousePosition.y > screenPoint.y) {
  directionX = -1f; directionY = 1f;  
  }
  else if (Input.mousePosition.x < screenPoint.x && Input.mousePosition.y < screenPoint.y) {
  directionX = 1f; directionY = -1f;
  }
  else if (Input.mousePosition.x < screenPoint.x && Input.mousePosition.y > screenPoint.y) {
  directionX = -1f; directionY = -1f;  
  }
  else if (Input.mousePosition.x > screenPoint.x && Input.mousePosition.y < screenPoint.y) {
  directionX = 1f; directionY = 1f;  
  }
  angle += Input.GetAxis("Mouse X") * sensitivity * directionX;
  angle += Input.GetAxis("Mouse Y") * sensitivity * directionY;
  }


Когда я нажимаю левую кнопку мышки объект и передвигается, и вращается. Как сделать чтобы при нажатии на левую кнопку мыши объект передвигался, а при нажатии на правую, объект крутился ?


Моя игра - Collect Fruit
 
СообщениеУ меня есть 2 скрипта, один перемещение объекта с помощью мышки :
Код

private var screenPoint : Vector3;
private var offset : Vector3;

function Start () : void {
  originRotation = transform.rotation;
  screenPoint = Camera.main.WorldToScreenPoint(transform.position);
  }

function OnMouseDown () {
  screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);

  offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}

function OnMouseDrag () {
  var curScreenPoint : Vector3= new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);

  var curPosition : Vector3= Camera.main.ScreenToWorldPoint(curScreenPoint);
  transform.position = curPosition;
}


А второй поворот объекта мышкой :
Код

  var speed : float= 10.0f;
  var sensitivity : float= 10.0f;
  private var originRotation : Quaternion;
  private var screenPoint : Vector2;
  private var angle : float= 0.0f;

function Start () {
  originRotation = transform.rotation;
  screenPoint = Camera.main.WorldToScreenPoint(transform.position);
  }

  function Update () {
  if (angle > 359.9f) angle = 0;  
  if (angle < 0) angle = 359.9f;
  var rotate : Quaternion= originRotation * Quaternion.AngleAxis(angle, Vector3.forward);
  transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.deltaTime * speed);
}

  function OnMouseDrag () {
  var directionX : float= 0f;
  var directionY : float= 0f;
  if (Input.mousePosition.x > screenPoint.x && Input.mousePosition.y > screenPoint.y) {
  directionX = -1f; directionY = 1f;  
  }
  else if (Input.mousePosition.x < screenPoint.x && Input.mousePosition.y < screenPoint.y) {
  directionX = 1f; directionY = -1f;
  }
  else if (Input.mousePosition.x < screenPoint.x && Input.mousePosition.y > screenPoint.y) {
  directionX = -1f; directionY = -1f;  
  }
  else if (Input.mousePosition.x > screenPoint.x && Input.mousePosition.y < screenPoint.y) {
  directionX = 1f; directionY = 1f;  
  }
  angle += Input.GetAxis("Mouse X") * sensitivity * directionX;
  angle += Input.GetAxis("Mouse Y") * sensitivity * directionY;
  }


Когда я нажимаю левую кнопку мышки объект и передвигается, и вращается. Как сделать чтобы при нажатии на левую кнопку мыши объект передвигался, а при нажатии на правую, объект крутился ?

Автор - AIDEN
Дата добавления - 13 Июл 2014 в 16:20
AltairДата: Вс, 13 Июл 2014, 17:13 | Сообщение # 2
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
AIDEN, сделать проверку какая именно кнопка нажата)
 
СообщениеAIDEN, сделать проверку какая именно кнопка нажата)

Автор - Altair
Дата добавления - 13 Июл 2014 в 17:13
AltairДата: Вс, 13 Июл 2014, 17:14 | Сообщение # 3
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
Код
var speed : float= 10.0f;  
   var sensitivity : float= 10.0f;  
   private var originRotation : Quaternion;  
   private var screenPoint : Vector2;  
   private var angle : float= 0.0f;  

  function Start () {  
   originRotation = transform.rotation;  
   screenPoint = Camera.main.WorldToScreenPoint(transform.position);  
   }  

   function Update () {  
   if (angle > 359.9f) angle = 0;   
   if (angle < 0) angle = 359.9f;  
   var rotate : Quaternion= originRotation * Quaternion.AngleAxis(angle, Vector3.forward);  
   transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.deltaTime * speed);  
  }  

   function OnMouseDrag () {  
   var directionX : float= 0f;  
   var directionY : float= 0f;  
if(Input.GetButton("Fire2")){
   if (Input.mousePosition.x > screenPoint.x && Input.mousePosition.y > screenPoint.y) {  
   directionX = -1f; directionY = 1f;   
   }  
   else if (Input.mousePosition.x < screenPoint.x && Input.mousePosition.y < screenPoint.y) {  
   directionX = 1f; directionY = -1f;  
   }  
   else if (Input.mousePosition.x < screenPoint.x && Input.mousePosition.y > screenPoint.y) {  
   directionX = -1f; directionY = -1f;   
   }  
   else if (Input.mousePosition.x > screenPoint.x && Input.mousePosition.y < screenPoint.y) {  
   directionX = 1f; directionY = 1f;   
   }  
   angle += Input.GetAxis("Mouse X") * sensitivity * directionX;  
   angle += Input.GetAxis("Mouse Y") * sensitivity * directionY;  
}
   }  
  
 
Сообщение
Код
var speed : float= 10.0f;  
   var sensitivity : float= 10.0f;  
   private var originRotation : Quaternion;  
   private var screenPoint : Vector2;  
   private var angle : float= 0.0f;  

  function Start () {  
   originRotation = transform.rotation;  
   screenPoint = Camera.main.WorldToScreenPoint(transform.position);  
   }  

   function Update () {  
   if (angle > 359.9f) angle = 0;   
   if (angle < 0) angle = 359.9f;  
   var rotate : Quaternion= originRotation * Quaternion.AngleAxis(angle, Vector3.forward);  
   transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.deltaTime * speed);  
  }  

   function OnMouseDrag () {  
   var directionX : float= 0f;  
   var directionY : float= 0f;  
if(Input.GetButton("Fire2")){
   if (Input.mousePosition.x > screenPoint.x && Input.mousePosition.y > screenPoint.y) {  
   directionX = -1f; directionY = 1f;   
   }  
   else if (Input.mousePosition.x < screenPoint.x && Input.mousePosition.y < screenPoint.y) {  
   directionX = 1f; directionY = -1f;  
   }  
   else if (Input.mousePosition.x < screenPoint.x && Input.mousePosition.y > screenPoint.y) {  
   directionX = -1f; directionY = -1f;   
   }  
   else if (Input.mousePosition.x > screenPoint.x && Input.mousePosition.y < screenPoint.y) {  
   directionX = 1f; directionY = 1f;   
   }  
   angle += Input.GetAxis("Mouse X") * sensitivity * directionX;  
   angle += Input.GetAxis("Mouse Y") * sensitivity * directionY;  
}
   }  
  

Автор - Altair
Дата добавления - 13 Июл 2014 в 17:14
AIDENДата: Вс, 13 Июл 2014, 18:13 | Сообщение # 4
Нет аватара
 
Сообщений: 59
Награды: 0
Репутация: 56
Статус: Offline
Altair, спасибо ). Сейчас попробую

Добавлено (13 Июл 2014, 17:54)
---------------------------------------------
- if(Input.GetButton("Fire2")) не работает (((
Я думал может как-то сделать через луч Raycast ?

Добавлено (13 Июл 2014, 18:13)
---------------------------------------------
Есть ещё такой скрипт :

Код

using UnityEngine;
using System.Collections;

public class mPanelControl : MonoBehaviour {

      public Vector3 vectorAxis = Vector3.up;
      private Quaternion originRotation;       
      private Vector3 oldPoint;
      private Ray ray;
      public  Plane plane;
      public  float distance = 100f;
      public  float angle = 0f;
       
      
      void Start()
      {
          plane = new Plane(vectorAxis, transform.position);
      }

      void OnMouseDown()
      {         
          ray = Camera.main.ScreenPointToRay(Input.mousePosition);

          if (plane.Raycast(ray, out distance))
          {
              oldPoint = ray.GetPoint(distance);
              originRotation = transform.rotation;
          }
      }

      void OnMouseDrag()
      {
          if (Input.GetMouseButton(0))
          {
               
              ray = Camera.main.ScreenPointToRay(Input.mousePosition);
              
              if(plane.Raycast(ray, out distance))
              {
                  Vector3 newPoint = ray.GetPoint(distance);

                  Vector3 vecFrom = oldPoint - transform.position;
                  Vector3 vecTo = newPoint - transform.position;

                  angle = Vector3.Angle(vecFrom, vecTo.normalized);

                  Vector3 cross = Vector3.Cross(vectorAxis, vecFrom);

                  if (Vector3.Dot(vecTo, cross) < distance)
                  {
                      vectorAxis = -vectorAxis;
                  }

                  transform.rotation = originRotation * Quaternion.AngleAxis(angle, vectorAxis);
                  
                  Debug.DrawLine(transform.position, oldPoint, Color.blue);
                  Debug.DrawLine(transform.position, newPoint, Color.green);
                  Debug.DrawLine(oldPoint, newPoint, Color.red);
              }
          }
      }
}
   


Только что-то он не работает (


Моя игра - Collect Fruit
 
СообщениеAltair, спасибо ). Сейчас попробую

Добавлено (13 Июл 2014, 17:54)
---------------------------------------------
- if(Input.GetButton("Fire2")) не работает (((
Я думал может как-то сделать через луч Raycast ?

Добавлено (13 Июл 2014, 18:13)
---------------------------------------------
Есть ещё такой скрипт :

Код

using UnityEngine;
using System.Collections;

public class mPanelControl : MonoBehaviour {

      public Vector3 vectorAxis = Vector3.up;
      private Quaternion originRotation;       
      private Vector3 oldPoint;
      private Ray ray;
      public  Plane plane;
      public  float distance = 100f;
      public  float angle = 0f;
       
      
      void Start()
      {
          plane = new Plane(vectorAxis, transform.position);
      }

      void OnMouseDown()
      {         
          ray = Camera.main.ScreenPointToRay(Input.mousePosition);

          if (plane.Raycast(ray, out distance))
          {
              oldPoint = ray.GetPoint(distance);
              originRotation = transform.rotation;
          }
      }

      void OnMouseDrag()
      {
          if (Input.GetMouseButton(0))
          {
               
              ray = Camera.main.ScreenPointToRay(Input.mousePosition);
              
              if(plane.Raycast(ray, out distance))
              {
                  Vector3 newPoint = ray.GetPoint(distance);

                  Vector3 vecFrom = oldPoint - transform.position;
                  Vector3 vecTo = newPoint - transform.position;

                  angle = Vector3.Angle(vecFrom, vecTo.normalized);

                  Vector3 cross = Vector3.Cross(vectorAxis, vecFrom);

                  if (Vector3.Dot(vecTo, cross) < distance)
                  {
                      vectorAxis = -vectorAxis;
                  }

                  transform.rotation = originRotation * Quaternion.AngleAxis(angle, vectorAxis);
                  
                  Debug.DrawLine(transform.position, oldPoint, Color.blue);
                  Debug.DrawLine(transform.position, newPoint, Color.green);
                  Debug.DrawLine(oldPoint, newPoint, Color.red);
              }
          }
      }
}
   


Только что-то он не работает (

Автор - AIDEN
Дата добавления - 13 Июл 2014 в 18:13
AltairДата: Пн, 14 Июл 2014, 13:27 | Сообщение # 5
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
AIDEN, можно ещё не mouse drag юзать
а например Input.GetAxis("Mouse Y") и так же по иксу и просто добавлять эти значения к transform.rotation при условии что зажата та или иная кнопка)
И так же с перемещением)
 
СообщениеAIDEN, можно ещё не mouse drag юзать
а например Input.GetAxis("Mouse Y") и так же по иксу и просто добавлять эти значения к transform.rotation при условии что зажата та или иная кнопка)
И так же с перемещением)

Автор - Altair
Дата добавления - 14 Июл 2014 в 13:27
AIDENДата: Ср, 16 Июл 2014, 20:04 | Сообщение # 6
Нет аватара
 
Сообщений: 59
Награды: 0
Репутация: 56
Статус: Offline
Altair, спасибо большое за помощь. Вечером попробую )))

Моя игра - Collect Fruit
 
СообщениеAltair, спасибо большое за помощь. Вечером попробую )))

Автор - AIDEN
Дата добавления - 16 Июл 2014 в 20:04
Форум Игроделов » UNITY3D » СКРИПТИНГ » Вопрос по управлению объектом с помощью мышки (Скрипт есть)
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024