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 Mintchocolate · Jun 08, 2013 at 10:01 AM · javascript

Click To Revert to Original Texture else Destroy script help

Need Help with scripting problem. I am trying to make a City Building game where the building will randomly destroy if not clicked. The script does change the texture to "txture" and destroy it. The problem now is that the script still doesn't change/revert to "original." i Think the problem lies with the Raycast problem. Any solution for this will be helpful. Thanks

 var Txture : Texture;
 var Original : Texture;
 
 function Start ()
 {
  InvokeRepeating ("Riot", 1, 1);
  }
 
 function Riot() {
 var RiotRandom : int = Random.Range(1,100);
     if (RiotRandom > 1) {
        renderer.material.mainTexture = Txture; 
        }
        InvokeRepeating ("Destroyz", 5, 1);
  }
  
 function Destroyz() {
 if(Input.GetMouseButtonDown(0)){
         var ray : Ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         var hit : RaycastHit;
 if(Physics.Raycast(ray,hit, 150) &&(hit.transform.tag == "Bd1"))
 {
     renderer.material.mainTexture = Original;
 }
 }
         else
     {
        Destroy(gameObject);
        }
        }

Note: Bd1 is the building tag & I Put this script at the building, not camera

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
Best Answer

Answer by robertbu · Jun 08, 2013 at 03:12 PM

There are a couple of strange thing here. First on Line 14, you have a InvokeRepeating(). This is going to cause a new InvokeRepeating() every time Riot() is called (without canceling the old one). You probably want just Invoke(). Second, GetMouseButtonDown() is only true for a single frame that the button is held down, so the chance that it will be true for the same frame that Destroyz() is called is vary small. Here is a bit of a rewrite to your code that gets closer to what I think you want:

 var Txture : Texture;
 var Original : Texture;
 
 private var doDestroy = false;
  
 function Start () {
  InvokeRepeating ("Riot", 1, 1);
  }
  
 function Riot() {
 var RiotRandom : int = Random.Range(1,100);
     if (RiotRandom > 1 && !doDestroy) {
        renderer.material.mainTexture = Txture; 
        doDestroy = true;
        Invoke("Destroyz", 5);
        }
  }
  
 function Destroyz() {
     Debug.Log(doDestroy.ToString());
     if (doDestroy)
            Destroy(gameObject);
 }
 
 function OnMouseDown() {
     renderer.material.mainTexture = Original; 
     doDestroy = false;
 }
Comment
Add comment · Show 2 · 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
avatar image Mintchocolate · Jun 08, 2013 at 05:00 PM 0
Share

Thanks!! It works. But there is small problem. I want the script to repeat back to InvokeRepeating Riot(). so it will keep repeating until the game ends or fail to click and destroyed.

avatar image robertbu · Jun 08, 2013 at 11:26 PM 0
Share

You'll have to explain more. Riot() still continues to repeat. But you will not know how soon or how far you click the next one will come. If you want it to wait for whatever time you are currently using for InvokeRepeating(), you will need to get rid of InvokeRepeating() and use your owner timestamp. Here is an exmaple:

 var Txture : Texture;
 var Original : Texture;
 var nextRiot = 1.0;
 
 private var timeStamp;
 private var doDestroy = false;
 
 function Start () {
      timeStamp = Time.time + nextRiot;
  }
  
  function Update() {
 
     if (timeStamp < Time.time) {
         Riot();
         TimeStamp = Time.time + nextRiot;
     }
 }
 
 function Riot() {
     var RiotRandom : int = Random.Range(1,100);
     if (RiotRandom > 1 && !doDestroy) {
        renderer.material.mainTexture = Txture; 
        doDestroy = true;
        Invoke("Destroyz", 5);
        }
  }
  
 function Destroyz() {
     if (doDestroy)
            Destroy(gameObject);
 }
 
 function On$$anonymous$$ouseDown() {
     renderer.material.mainTexture = Original; 
     doDestroy = false;
     timeStamp = Time.time + nextRiot;
 }

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

14 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

Related Questions

Multiple Cars not working 1 Answer

GuiTexture Width Change 1 Answer

Help needed with a pickup script 2 Answers

Space Invaders movement? 1 Answer

Script to disable MouseLook? 2 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