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 Vanilla-Plus · Jun 30, 2014 at 07:12 PM · shader-replacement

Can an object check if a raycast is no longer hitting it?

I want an object and its children to have a certain shader, but only while its being hit with a raycast by a player. Changing the shader initially on hit is easy enough using GetComponentsInChildren, but I'm not sure of an efficient way of changing it back to its original shader (diffuse) if its no longer being hit. Is this kind of task even up to an object to do for itself, or is it better to be set by the players raycasting script?

I was thinking something along the lines of storing the hit object as a variable ('hitObject'), and then using the 'else' part of the raycast check to say:

 hitObject.GetComponent().material.shader = Shader.Find("Diffuse");


or something to that effect. The problem is that that would be player-side, not object-side, and always firing when the raycast isn't hitting something which seems like a waste. I'm pretty new at this, so I don't know what level of efficiency to be aiming for... but I feel it could be done simpler.

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 Loius · Jun 30, 2014 at 07:16 PM

Raycast isn't an event-driven action, so there's no way to listen for "not being hit by raycast". Whoever is casting the ray is responsible for notifying everyone of the ray's actions.

You'd just need to keep track of the last thing hit -

 GameObject lastHitByRay;
 
 void Cast() {
   GameObject nowHitByRay = // raycast result
   if ( lastHitByRay && lastHitByRay != nowHitByRay ) lastHitByRay.SendMessage("OnRayHitEnded");
   lastHitByRay = nowHitByRay;
   nowHitByRay.SendMessage("OnRayHitBegan");
 }

Keep in mind that solution is a little dumb, but it hopefully gets the idea across.

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

3 People are following this question.

avatar image avatar image avatar image

Related Questions

How to Reset Shader Replacement in Scene View? 1 Answer

I'am new to shaders and I'am making games for mobile devices should I switch over to LWRP? 0 Answers

How to transform GLSL shaders into ShaderLab shades? 0 Answers

Does static batching work with replacement shaders? 0 Answers

How can i combine shaders? 0 Answers


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