Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 krcDeuce · Jan 15, 2013 at 08:27 AM · raycastmultiple-objects

Why does my script affect objects it's not assigned to?

To help me better understand the use of raycasting for determine the object that I've clicked on, I was able to find the following code in another forum. It was originally Javascript, but I modified it to C#.

 public class raycastTest04 : MonoBehaviour {
 
   // Use this for initialization
   void Start () {
     
   }
     
   // Update is called once per frame
   void Update () {
     RaycastHit hit;
     Ray ray;
         
     ray = Camera.main.ScreenPointToRay(Input.mousePosition);
     
     if (Physics.Raycast(ray, out hit))
     {
       Transform transform;
       transform = (UnityEngine.Transform)hit.collider.GetComponent("Transform");
             
       if (transform)
       {
         transform.Rotate(0, -2, 0);    
       }
     }
   }
 }

I then created 3 cube objects. I did not duplicate the first cube, but instead created three individual cubes, named Cube1, Cube2, and Cube3. None of them are set as static. I attached the script to Cube1, but not Cube2 or Cube3. However, when I run my program, every cube I mouseover will rotate.

Why do Cube2 and Cube3 rotate when only Cube1 has the script attached to it?

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

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by Lovrenc · Jan 15, 2013 at 08:43 AM

So what your script does is

a) Cast ray.
b) Rotate object that you hit. And i think we agree you can indeed hit more than just "holder" cube.

So your script is not doing rotation on the holder of the script, but on ANY object you hover on.

Test 1: If you were to put this script on 2 cubes, cube you hover on would rotate twice as fast! Why? 2 scripts are rotating it.

Test 2: If you check wheather object you hit IS object you are running script on, other cubes will stop rotating.

 using UnityEngine;
 
 public class test : MonoBehaviour {
 
   // Use this for initialization
   void Start () {
 
   }
 
   // Update is called once per frame
   void Update () {
     RaycastHit hit;
     Ray ray;
 
     ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 
     if (Physics.Raycast(ray, out hit))
     {
       if(hit.transform.gameObject.Equals(gameObject)) { //is object my ray hit the same as the one that is holding the script??
           Transform transform;
           transform = (UnityEngine.Transform)hit.collider.GetComponent("Transform");
     
           if (transform)
           {
             transform.Rotate(0, -2, 0); 
           }
         }
     }
   }
 }


Note that this is only a test, you should by no means do this in this manner as you would have hundered of raycasts per update. What you should do if you want to have rotating and non rotating cubes is to place your script on camera for isntance and only rotate cubes that have proper tag (eg. "rotate").

Comment
Add comment · Share
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

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

9 People are following this question.

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

Related Questions

The name 'Joystick' does not denote a valid type ('not found') 2 Answers

racing game raycast problem 2 Answers

Disabling a lineRender or Ray when there is no target 1 Answer

Calling function in a script based on raycast hit 1 Answer

Raycast Destroys player. 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