2015-09-28 4 views
0

У меня возникли проблемы с созданием скрипта, который, как только игрок нажимает на объект gameObject, будет следовать за игрой. Объект будет удален после повторного щелчка мыши.Drag GameObject With Mouse

Вот сценарий:

public float distance = 10; 

public void OnMouseDrag() 
{ 
    Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance); 
    Vector3 objPosition = Camera.main.ScreenToWorldPoint(mousePosition); 

    transform.position = objPosition; 
} 

Это прекрасно работает, но вопрос, если игрок (главный кулачок) имеет какой-либо сценарий движения на нем, например, как этот персонаж сценария контроллера на нем или его родительский, тогда элемент gameObject, который будет поднят, будет перемещаться, как будто он пытается уйти от мыши.

public float speed = 6.0f; 
public float jumpSpeed = 8.0f; 
public float gravity = 20.0f; 
private Vector3 moveDirection = Vector3.zero; 

void Update() 
{ 
    CharacterController controller = GetComponent<CharacterController>(); 

    if(Input.GetKey(KeyCode.LeftShift)) 
    { 
     speed = 15.0f; 
    }else 
    { 
     speed = 6.0f; 
    } 

    if(controller.isGrounded) 
    { 
     moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 

     moveDirection = transform.TransformDirection(moveDirection); 

     moveDirection *= speed; 
    } 

    if(Input.GetButton("Jump")) 
    { 
     moveDirection.y = jumpSpeed; 
    } 

    moveDirection.y -= gravity * Time.deltaTime; 
    controller.Move(moveDirection * Time.deltaTime); 

    float rotateRight = Input.GetAxis("Mouse X"); 

    transform.Rotate(0, rotateRight, 0); 
} 

Если приведенный выше сценарий отключен, то GameObject не выйдет из строя, и он отлично работает.

Я знаю, что ввод, созданный в контроллере символов, каким-то образом приводит к верхнему скрипту, перемещая мышь, поэтому объект gameObject преобразуется в этом направлении, пытаясь сохранить определенную точку мыши.

Но как сделать так, чтобы это не повлияло.

+0

Попробуйте поместить логическое значение в вашем обновлении, которое получает переключения на сопротивление 'если (isBeingDragged) возвращение;'. Эффективное отключение сценария всякий раз, когда это правда. –

ответ

0

Держу пари, перетаскивание мышц происходит до вашего движения.

Попробуйте положить вашу тащит логику LateUpdate() так что он может accommidate для новой позиции