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 /
  • Help Room /
avatar image
0
Question by DoritoFox · Feb 17, 2019 at 04:29 PM · c#2d gamemovement scriptsnake

Issues with snake game in C#

Hello! It is my first time posting in this forum. Please bear with me, I'm a huge amateur.

So, one of the first things I wanted to do when I started to learn coding was to make a snake game.
Today, I decided I was ready for that! And things were going pretty well, except for an issue.

Here is how the game works: You(square), the player, start the game by automatically moving to the right. The left and right arrow keys change your angle by 90º. A single piece of food(circle) spawns at the beginning of the game and, when you touch it, it disappears and allows for another food piece to spawn, and so on. I still haven't implemented any kind of progress in the game yet.

However, when the player catches the food, its direction starts going wonky. Instead of staying on the perfect up/down/left/right axis, it drifts a little bit with every new movement. So now I have to do one of two things:

a) fix the controls and make something better;

b) fix this particular issue somehow.

The scripts involved are two, both attached to the player.

Player Movement Script:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class PlayerMovement : MonoBehaviour
 {
     public float speed = 0.5f;
 
     void Start()
     {
         transform.position = new Vector3(0, 0, 0);
 
     }
     
     void Update()
     {
         //starts the player going into the right direction(how poetic!)
         transform.localPosition += transform.right * speed * Time.deltaTime;
         Debug.Log("test");
         changeDirection();
     }
     //will change the angle of the player 90 degrees
     void changeDirection() {
         if (Input.GetKeyDown(KeyCode.RightArrow))
         {
             RotateLeft();
         }
         else if (Input.GetKeyDown(KeyCode.LeftArrow))
         {
             RotateRight();
         }
     }
    void RotateLeft()
         {
             transform.Rotate(Vector3.forward * -90);
         }
 
    void RotateRight()
         {
             transform.Rotate(Vector3.forward * +90);
         }
 }
 

And the script to eat the food:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class EatFood : MonoBehaviour
 {
 
     public SpawnFood spawnFood;
         void OnCollisionEnter2D(Collision2D transformCollision)
         {
             if (transformCollision.gameObject.tag == "Food")
             {
                 Destroy(GameObject.FindWithTag("Food"));
                 spawnFood.maySpawn = true;
         }
         }
 }
 

I believe the issue started when I imported the boolean from the food spawning script.

What can I do here?

PS: How do I make paragraphs? hehe

[1]: /storage/temp/133284-capturar.png

capturar.png (1.4 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

2 Replies

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by DCordoba · Feb 20, 2019 at 01:52 PM

well the problem is, I think, the physics about the collider I'am not very good explaining it, please forgive me if I mess instead of explain

when you collide a object, it change a bit its direction, you know, like on normal life both objects act following the newtonian's repulsion? law.

so the forward isn't anymore pointing straight is, a little pushed off

after this small change, you expand the error taking the forward of the object to continue the rotation, each time you move, you add this slighty difference to the total

you can, as you already said:

a) change controls: the old snake game change dir relative to the map, not the snake, so if you press up it go to the up of the map, didn't keep going forward

 void changeDirection() {
      if (Input.GetKeyDown(KeyCode.RightArrow)){
          GoLeft();
      } else if (Input.GetKeyDown(KeyCode.LeftArrow)){
          GoRight();
      }else if (Input.GetKeyDown(KeyCode.UpArrow)){
           GoUp();
      }else if (Input.GetKeyDown(KeyCode.DownArrow)){
           GoDown();
      }
  }

  void GoLeft()
      {
          transform.right= Vector3.left;
      }
 
  void GoRight()
      {
          transform.right = Vector3.right;
      }
  void GoUp()
       {
          transform.right = Vector3.up;
      }
  void GoUp()
      {
          transform.right = Vector3.down;
      }
  }

b) just solve the problem: to evade physics affect the collider but keeping it detecting collisions, use trigger, so set snake head collider as a trigger and start catching it with OnTriggerEnter in this case, you need to change the line 9 of EatFood by

  void TriggerEnter2D(Collider2D transformCollision){

you will need to change the rest scripts that manage collisions, like the walls

and in order to correctly, (both collider and triggers) activate it, I suggest change displacement from kinematic (using transform.position) to physics (using forces) change line 18 of PlayerMovement by

  snakeRigidbody2D.velocity = transform.right * speed * Time.deltaTime;

snakeRigidbody2D is... the rigidbody of the snake

bonus? xd, I suggest to use the info provided to the collider to destroy the object, Instead of searching food item on each pickup:

      void OnCollisionEnter2D(Collision2D transformCollision) //or void TriggerEnter2D(Collider2D transformCollision){
      {
          if (transformCollision.gameObject.CompareTag("Food"))
          {
              Destroy(transformCollision.gameObject);
              spawnFood.maySpawn = true;
           }
      }

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
avatar image
0

Answer by DoritoFox · Feb 25, 2019 at 03:13 PM

@DCordoba Oh my god, thank you so much! I didn't expect such a detailed and thorough answer. I am very sorry for the late reply, college started last week for me and I have been very busy. I didn't get a chance to fully test out the code you sent me but I'm positive it works. Thank you so much again. This is really helpful!

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

663 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image 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

2D AI movement 0 Answers

Move Player along normal of floor? 1 Answer

Snake movement from Snake VS Block 0 Answers

I can't seem to rotate my character depending on what side he is running to (2D sidescroller) 0 Answers

No overload for method. 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