Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by danielos1996 · Oct 12, 2018 at 08:04 AM · c#beginnerbook

Need help moving a book gameobject to a preview position. Using VRTK

So Im making a VR scene where the player will be able to hover the pointer over books. As they hover over a book it will come forward to the preview position where they will be able to see the front of the book where the title is. When the book is in this preview position it will wait 3 seconds then return to its origin position. If in the 3 second wait time the player clicks the trigger on the book. It will move forward again to the reading position.

The complexity arises when there is more than one book. as the player hovers over a book then moves to the next one the previous book must cancel its move and return to its origin position.

I have been working on this script for 2 days now. The first attempt I made was by muting the move in the fixed update method and using a bunch ob bools to control when the book should move. But this quickly became too complex so I scrapped the script after 4 hours of working on it and started again.

My current approach is to use an IEnumerator and call this. I am still having issues. I'm only concentrating on the fist part of the feature (moving the books to the preview position) for now. I need the player to be able to point the cursor at any book and it pops out and any of the other ones currently in the middle of a movement return to their destination. So if the player moves the pointer horizontally across a row of books each one pops out and the previous one returns.

I would like to know what you guys think the best approach is. There is still alot of things in C# that I don't understand so my worry is that there is a better approach to coding this than the way i'm doing now.

Here is my current code. (Still not working )

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using VRTK;
 
 public class BookViewer : MonoBehaviour {
 
     public Transform previewPos;
     public Transform viewPos;
     public float speed = 10;
     
     [Header("VRTK")]
     public VRTK_Pointer pointer;
     public VRTK_InteractableObject linkedObject;
     [Header("Bools")]
     public bool bookLocked;
     public bool previewingBook;
     public bool moveComplete;
 
     BookViewer[] activeBooks;
 
     Vector3 originalPos;
     Quaternion originalRot;
 
 
     protected virtual void OnEnable()
     {
         //----------Set Up Positions-------------------------------------------------------------------
         originalPos = gameObject.transform.position;
         originalRot = gameObject.transform.rotation;
         //----------Referances-------------------------------------------------------------------------
         activeBooks = FindObjectsOfType<BookViewer>();
         linkedObject = (linkedObject == null ? GetComponent<VRTK_InteractableObject>() : linkedObject);
         //----------Subscribe to events----------------------------------------------------------------
         if (linkedObject != null)
         {
             linkedObject.InteractableObjectUsed += InteractableObjectUsed;
             linkedObject.InteractableObjectTouched += InteractableObjectTouched;
             linkedObject.InteractableObjectUnused += InteractableObjectUnused;
             linkedObject.InteractableObjectUntouched += InteractableObjectUnouched;
         }
         //---------------------------------------------------------------------------------------------
     }
 
     protected virtual void OnDisable()
     {
         //-------Unsubscribe From Events--------------------------------------------
         if (linkedObject != null)
         {
             linkedObject.InteractableObjectUsed -= InteractableObjectUsed;
             linkedObject.InteractableObjectTouched -= InteractableObjectTouched;
             linkedObject.InteractableObjectUnused -= InteractableObjectUnused;
             linkedObject.InteractableObjectUntouched -= InteractableObjectUnouched;
         }
         //--------------------------------------------------------------------------
     }
 
     /// <summary>
     /// When the user hovers over a book it moves it to the preview position.
     /// ANy other books in the preview posision or in the middle of a move will return to origin.
     /// </summary>
     void InteractableObjectTouched(object sender, InteractableObjectEventArgs e)
     {
         MoveBook(previewPos.position, previewPos.rotation, speed, 0);
     }
 
     /// <summary>
     /// When the user unhovers from a book the book will continue its move to the preview position.
     /// Unless the corsor moves onto another book in which case the previous book will return to origin.
     /// If the book makes it to the prevew position it will wait there for 3 seconds then return to origin.
     /// </summary>
     void InteractableObjectUnouched(object sender, InteractableObjectEventArgs e)
     {
         MoveBook(originalPos, originalRot, speed, 3);
     }
 
     /// <summary>
     /// If the book is in the previw position it will be interactable so the player can click on it.
     /// Player will only be able to click if the book is in prevew position.
     /// Book will move to the reading position when clicked.
     /// When book is in reading position the hovering over other books will be disabled.
     /// </summary>
     protected virtual void InteractableObjectUsed(object sender, InteractableObjectEventArgs e)
     {
     
     }
 
     /// <summary>
     /// When book is in reading position and it is clicked again it will return to its origin position.
     /// Other books will then be unlocked and be able to be hoverd over and previewd again.
     /// </summary>
     protected virtual void InteractableObjectUnused(object sender, InteractableObjectEventArgs e)
     {
 
     }
 
 
     private void Update()
     {
         print (moveComplete);
     }
 
 
     public void ReturnBook(int delay)
     {
         StartCoroutine(MoveObject(originalPos, originalRot, speed, delay));
     }
 
     public void MoveBook(Vector3 _targetPos, Quaternion _targetRot, float _speed, float delay)
     {
         if (bookLocked) return;
         StartCoroutine(MoveObject(_targetPos, _targetRot, _speed, delay));
         foreach(BookViewer book in activeBooks)
         {
             if (book.gameObject != gameObject) book.ReturnBook(0);
         }
     }
 
     public IEnumerator MoveObject(Vector3 _targetPos, Quaternion _targetRot, float _speed, float delayTime)
     {
         yield return new WaitForSeconds(delayTime);
 
         while (gameObject.transform.position != _targetPos || gameObject.transform.rotation != _targetRot)
         {
             float step = _speed * Time.deltaTime;
             moveComplete = false;
             gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, _targetPos, step);
             gameObject.transform.rotation = Quaternion.RotateTowards(gameObject.transform.rotation, _targetRot, step * 100);
             yield return new WaitForFixedUpdate();
             //print("TargetPos_" + targetPos+"\nCurrentPos_"+gameObject.transform.position);
 
         }
         moveComplete = true;
 
     }
 
 }
 

Here is a screen shot of the books in unity.

alt text

capture.png (181.7 kB)
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

555 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

2D Character Control Help 0 Answers

,DontDestroyOnLoad Object spawns endlessly 1 Answer

Making a bubble level (not a game but work tool) 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges