Error CS0246 can't solve

here The code got some issue at the line 36

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

// a sound controller is needed
[RequireComponent(typeof(AudioSource))]

// for each cell we create an instantiation which is able to move or combine with others

public class Tile : MonoBehaviour {

public GameObject textFab;
// simple sound when a cell moves
public AudioClip FX;
// value which is written on each cell
public int tileValue;
// same value? Do a combinaison…
public bool combined;

Vector2 movePosition;
bool combine;
Tile cTile;
bool grow;

void Start () {
// position of our cell and creation
movePosition = transform.position;
textFab = (GameObject)Instantiate (textFab,transform.position,Quaternion.Euler(0,0,0));
Change (tileValue);
}

void Update () {

textFab.GetComponent<UI.Text>().transform.position = Camera.main.WorldToViewportPoint (transform.position);

if(transform.position != new Vector3(movePosition.x,movePosition.y,0f)) {
Manager.done = false;
// we move our cell slowly
transform.position = Vector3.MoveTowards(transform.position,movePosition, 35 * Time.deltaTime);
} else {
Manager.done = true;
// do a combinaison and increase valur on cell
if(combine) {
Change(tileValue * 2); // new value
combine = false;
grow = true;
// destroy our cell after it has combined with other
Destroy(cTile.textFab);
Destroy(cTile.gameObject);
// play a sound when cell combines with another
GetComponent().PlayOneShot(FX, 1.0f);
Manager.done = true;
}
}
// create a scale FX when it spawns
if(transform.localScale.x != 150 && !grow)
transform.localScale = Vector3.MoveTowards(transform.localScale,new Vector3(150f,150f,1f), 500 * Time.deltaTime);
if(grow) { // create a scale FX when cell combines with another
Manager.done = false;
transform.localScale = Vector3.MoveTowards(transform.localScale,new Vector3(187.5f,187.5f,1f), 500 * Time.deltaTime);
if(transform.localScale == new Vector3(187.5f,187.5f,1f))
grow = false;
} else
Manager.done = true;
}

void Change (int newValue) {

tileValue = newValue;
// after combination we change tile’s colour
GetComponent().color = Manager.tileColors [Mathf.RoundToInt(Mathf.Log (tileValue, 2) - 1)];
textFab.GetComponent<UI.Text>().text = tileValue.ToString();
// colour value which is written on our cell
textFab.GetComponent<UI.Text>().color = new Color (0.17f, 0.17f, 0.27f);
}

public bool Move (int x, int y) {

movePosition = Manager.gridToWorld (x, y);

if(transform.position != (Vector3)movePosition) {
if(Manager.grid [x, y] != null) {
combine = true;
combined = true;
cTile = Manager.grid[x,y];
Manager.grid[x,y] = null;
}
// move the cell
Manager.grid[x,y] = GetComponent();
Manager.grid[Mathf.RoundToInt(Manager.worldToGrid(transform.position.x,transform.position.y).x),Mathf.RoundToInt(Manager.worldToGrid(transform.position.x,transform.position.y).y)] = null;
return true;

} else
return false;
}
}

Line 36? Let me just figure that out from the wall of text you posted. :wink:

Please use code-tags when posting code. Always post the full error. In the end, it’ll be a typo or bad syntax. You can easily search for that error online too.

ok i try hard but stil can’t find the problem even with the online tuto

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

// a sound controller is needed
[RequireComponent(typeof(AudioSource))]

// for each cell we create an instantiation which is able to move or combine with others

public class Tile : MonoBehaviour {


public GameObject textFab;
// simple sound when a cell moves
public AudioClip FX;
// value which is written on each cell
public int tileValue;
// same value? Do a combinaison...
public bool combined;


Vector2 movePosition;
bool combine;
Tile cTile;
bool grow;

void Start () {
// position of our cell and creation
movePosition = transform.position;
textFab = (GameObject)Instantiate (textFab,transform.position,Quaternion.Euler(0,0,0));
Change (tileValue);
}

void Update () {

textFab.GetComponent<UI.Text>().transform.position = Camera.main.WorldToViewportPoint (transform.position);

if(transform.position != new Vector3(movePosition.x,movePosition.y,0f)) {
Manager.done = false;
// we move our cell slowly
transform.position = Vector3.MoveTowards(transform.position,movePosition, 35 * Time.deltaTime);
} else {
Manager.done = true;
// do a combinaison and increase valur on cell
if(combine) {
Change(tileValue * 2); // new value
combine = false;
grow = true;
// destroy our cell after it has combined with other
Destroy(cTile.textFab);
Destroy(cTile.gameObject);
// play a sound when cell combines with another
GetComponent<AudioSource>().PlayOneShot(FX, 1.0f);
Manager.done = true;
}
}
// create a scale FX when it spawns
if(transform.localScale.x != 150 && !grow)
transform.localScale = Vector3.MoveTowards(transform.localScale,new Vector3(150f,150f,1f), 500 * Time.deltaTime);
if(grow) { // create a scale FX when cell combines with another
Manager.done = false;
transform.localScale = Vector3.MoveTowards(transform.localScale,new Vector3(187.5f,187.5f,1f), 500 * Time.deltaTime);
if(transform.localScale == new Vector3(187.5f,187.5f,1f))
grow = false;
} else
Manager.done = true;
}

void Change (int newValue) {

tileValue = newValue;
// after combination we change tile's colour
GetComponent<SpriteRenderer>().color = Manager.tileColors [Mathf.RoundToInt(Mathf.Log (tileValue, 2) - 1)];
textFab.GetComponent<UI.Text>().text = tileValue.ToString();
// colour value which is written on our cell
textFab.GetComponent<UI.Text>().color = new Color (0.17f, 0.17f, 0.27f);
}

public bool Move (int x, int y) {

movePosition = Manager.gridToWorld (x, y);

if(transform.position != (Vector3)movePosition) {
if(Manager.grid [x, y] != null) {
combine = true;
combined = true;
cTile = Manager.grid[x,y];
Manager.grid[x,y] = null;
}
// move the cell
Manager.grid[x,y] = GetComponent<Tile>();
Manager.grid[Mathf.RoundToInt(Manager.worldToGrid(transform.position.x,transform.position.y).x),Mathf.RoundToInt(Manager.worldToGrid(transform.position.x,transform.position.y).y)] = null;
return true;

} else
return false;
}
}

Note you can EDIT your existing post, you don’t need to post again.

Presumably the error is on line 36 above “textFab.GetComponent<UI.Text>().transform.position = Camera.main.WorldToViewportPoint (transform.position)” ?

The error tells you which line/column, a description etc so you need to post the FULL error.

I will say that the code above looks very odd. “textFab” is a GameObject then you search for a Text UI element then get the transform etc. You can just do “textFab.transform.position = xxx”.

Tutorials and example code are great, but keep this in mind to maximize your success and minimize your frustration:

How to do tutorials properly:

Tutorials are a GREAT idea. Tutorials should be used this way:

Step 1. Follow the tutorial and do every single step of the tutorial 100% precisely the way it is shown. Even the slightest deviation (even a single character!) generally ends in disaster. That’s how software engineering works. Every single letter must be spelled, capitalized, punctuated and spaced (or not spaced) properly. Fortunately this is the easiest part to get right.

Be a robot. Don’t make any mistakes. BE PERFECT IN EVERYTHING YOU DO HERE.

If you get any errors, learn how to read the error code and fix it. Google is your friend here. Do NOT continue until you fix the error. The error will probably be somewhere near the parenthesis numbers (line and character position) in the file. It is almost CERTAINLY your typo causing the error, so look again and fix it.

Step 2. Go back and work through every part of the tutorial again, and this time explain it to your doggie. See how I am doing that in my avatar picture? If you have no dog, explain it to your house plant. If you are unable to explain any part of it, STOP. DO NOT PROCEED. Now go learn how that part works. Read the documentation on the functions involved. Go back to the tutorial and try to figure out WHY they did that. This is the part that takes a LOT of time when you are new. It might take days or weeks to work through a single 5-minute tutorial. Stick with it. You will learn.

Step 2 is the part everybody seems to miss. Without Step 2 you are simply a code-typing monkey and outside of the specific tutorial you did, you will be completely lost. If you want to learn, you MUST do Step 2.

Of course, all this presupposes no errors in the tutorial. For certain tutorial makers (like Unity, Brackeys, Imphenzia, Sebastian Lague) this is usually the case. For some other less-well-known content creators, this is less true. Read the comments on the video: did anyone have issues like you did? If there’s an error, you will NEVER be the first guy to find it.

Beyond that, Step 3, 4, 5 and 6 become easy because you already understand!

Finally, when you have errors…

Remember: NOBODY here memorizes error codes. That’s not a thing. The error code is absolutely the least useful part of the error. It serves no purpose at all. Forget the error code. Put it out of your mind.

The complete error message contains everything you need to know to fix the error yourself.

The important parts of the error message are:

  • the description of the error itself (google this; you are NEVER the first one!)
  • the file it occurred in (critical!)
  • the line number and character position (the two numbers in parentheses)
  • also possibly useful is the stack trace (all the lines of text in the lower console window)

Always start with the FIRST error in the console window, as sometimes that error causes or compounds some or all of the subsequent errors. Often the error will be immediately prior to the indicated line, so make sure to check there as well.

All of that information is in the actual error message and you must pay attention to it. Learn how to identify it instantly so you don’t have to stop your progress and fiddle around with the forum.

1 Like