Добро пожаловать на сайт "Game Creating CommUnity"
Здравствуйте, уважаемый пользователь!

Возможно, вы впервые на этом сайте и мы очень надеемся, что вам у нас понравится. Администрация сайта сделает всё возможное, чтобы ваше пребывание на сайте было максимально комфортным. Спасибо за внимание!

P.S. Данное окно вас больше не потревожит
Вопрос по управлению объектом с помощью мышки - Форум Игроделов
Ср, 16 Июл 2025, 01:36 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Вопрос по управлению объектом с помощью мышки
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
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2025
Войти Зарегистрироваться