- Home /
Question by
unity_19hari98 · May 18, 2018 at 04:43 PM ·
gameobjecttransformlistspawn
how to get the snake body parts to follow the snake head?
Guys I have been trying to build a "snake" like game in unity3D..
I find the direction to move in the function GetDirection(left,right,up or down).
MoveSnake() moves the snake in that direction for a certain distance.
parts is an List to contain all body parts of snake.
I add the current gameobject to parts list in the Start() function.
OnTriggerEnter() detects the collision of snake head with food and adds a new snake body part at that position.
I shift down the parts by one every time and put the current position as last element of parts list.
the problem is the body parts remain where they were created always and do not follow the head.
please help guys..Thanks in advance : )
private void Update () {
GetDirection ();
MoveSnake();
for (int i =0; i <parts.Count-1; i++) // shift down body parts of snake............
{
parts[i] = parts[i + 1];
}
if (parts.Count >=1)
{
parts[parts.Count - 1] = gameObject;
}
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("food"))
{
GameObject c = GameObject.CreatePrimitive(PrimitiveType.Cube);
c.transform.SetParent(ground.transform, false);
c.gameObject.transform.localPosition = food.transform.localPosition;
c.gameObject.transform.localRotation = transform.localRotation;
c.gameObject.transform.localScale = transform.localScale;
parts.Add(c);
food.transform.localPosition = new Vector3(Random.Range(-1.48f + 0.3f, 1.48f - 0.3f), 0.275f, Random.Range(-1.48f +0.3f, 1.48f - 0.3f));
}
}
Comment
Answer by Thorny2000 · May 18, 2018 at 06:59 PM
You need to show your MoveSnake() code, since that is where your code is that moves the snake.
private void $$anonymous$$oveSnake()
{
if ( dir == "UP")
{
transform.localPosition+=new Vector3(0,0, SPEED );
}
else if ( dir == "DOWN")
{
transform.localPosition+=new Vector3(0,0,-1*SPEED );
}
else if (dir== "RIGHT")
{
transform.localPosition+=new Vector3(SPEED ,0,0);
}
else if (dir == "LEFT")
{
transform.localPosition+=new Vector3(-1*SPEED ,0,0);
}
}
private void GetDirection()
{
if (Input.Get$$anonymous$$eyDown ($$anonymous$$eyCode.UpArrow) && dir != "DOWN")
{
dir = "UP";
}
else if (Input.Get$$anonymous$$eyDown ($$anonymous$$eyCode.DownArrow) && dir != "UP")
{
dir = "DOWN";
}
else if (Input.Get$$anonymous$$eyDown ($$anonymous$$eyCode.LeftArrow) && dir != "RIGHT")
{
dir = "LEFT";
}
else if (Input.Get$$anonymous$$eyDown ($$anonymous$$eyCode.RightArrow) && dir != "LEFT")
{
dir = "RIGHT";
}
}
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
use list of gameobjects transform in raycast 0 Answers
Sorting list of Transforms 1 Answer
Keep adding targets to a list 2 Answers
How i generate Gameobjects list? 0 Answers