- Home /
Error please help
I cant seem to figure this out i am sorta new to unity and i cant seem to understand how to fix this. I keep getting this error "Unexpected symbol if' in class, struct, or interface member declaration" and i also get this "Unexpected symbol
>' in class, struct, or interface member declaration" and i got 1 more "Primary constructor body is not allowed" How do i fix this? here is the script
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class TouchInput : MonoBehaviour {
public LayerMask touchInputMask;
private List<GameObject> touchList = new List<GameObject>();
private GameObject[] touchesOld;
private RaycastHit hit;
// Update is called once per frame
void Update ()
{
#if UNITY_EDITOR
if (Input.GetMouseButtonDown (0) || Input.GetMouseButtonUp (0)) {
touchesOld = new GameObject[touchList.Count];
touchList.CopyTo (touchesOld);
touchList.Clear ();
Ray ray = camera.ScreenPointToRay (Input.mousePosition);
if (Physics.Raycast (ray, out hit, TouchInputMask)) {
GameObject recipient = hit.transform.gameObject;
touchList.ADd (recipient);
if (Input.GetMouseButtonDown (0)) {
recipient.SendMessage ("OnTouchDown", hit.point, SendMessageOptions.DontRequireReceiver);
}
if (Input.GetMouseButtonUp (0)) {
recipient.SendMessage ("OnTouchUp", hit.point, SendMessageOptions.DontRequireReceiver);
}
if (Input.GetMouseButtonDown (0)) {
recipient.SendMessage ("OnTouchDown", hit.point, SendMessageOptions.DontRequireReceiver);
}
}
}
foreach (GameObject g in touchesOld) {
if (!touchList.Contains (g)) {
g.SendMessage ("OnTouchExit", hit.point, SendMessageOptions.DontRequireReceiver);
}
}
}
#endif
if(Input.touchCount >(0) {
touchesOld = new GameObject[touchList.Count];
touchList.CopyTo (touchesOld);
touchList.Clear ();
foreach (Touch touch in Input.touches) {
Ray ray = camera.ScreenPointToRay (touch.position);
if (Physics.Raycast (ray, out hit, TouchInputMask)) {
GameObject recipient = hit.transform.gameObject;
touchList.ADd (recipient);
if (touch.phase == TouchPhase.Began) {
recipient.SendMessage ("OnTouchDown", hit.point, SendMessageOptions.DontRequireReceiver);
}
if (touch.phase == TouchPhase.Ended) {
recipient.SendMessage ("OnTouchUp", hit.point, SendMessageOptions.DontRequireReceiver);
}
if (touch.phase == TouchPhase.Stationary || touch.phase == TouchPhas.Moved) {
recipient.SendMessage ("OnTouchDown", hit.point, SendMessageOptions.DontRequireReceiver);
}
if (touch.phase == TouchPhase.Canceled) {
recipient.SendMessage ("OnTouchExit", hit.point, SendMessageOptions.DontRequireReceiver);
}
}
}
foreach (GameObject g in touchesOld) {
if (!touchList.Contains (g)) {
g.SendMessage ("OnTouchExit",hit.point, SendMessageOptions.DontRequireReceiver);
}
}
}
}
Answer by Buckslice · Nov 29, 2017 at 02:58 AM
I am not sure what the exact purpose of this code is, but the errors seemed to be mainly a combination of extra braces, incorrect function/variable names (capitalization matters), and incorrect function parameters. Good luck!
public LayerMask touchInputMask;
private List<GameObject> touchList = new List<GameObject>();
private GameObject[] touchesOld;
private RaycastHit hit;
// Update is called once per frame
void Update() {
#if UNITY_EDITOR
if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonUp(0)) {
touchesOld = new GameObject[touchList.Count];
touchList.CopyTo(touchesOld);
touchList.Clear();
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, 100.0f, touchInputMask.value)) {
GameObject recipient = hit.transform.gameObject;
touchList.Add(recipient);
if (Input.GetMouseButtonDown(0)) {
recipient.SendMessage("OnTouchDown", hit.point, SendMessageOptions.DontRequireReceiver);
}
if (Input.GetMouseButtonUp(0)) {
recipient.SendMessage("OnTouchUp", hit.point, SendMessageOptions.DontRequireReceiver);
}
if (Input.GetMouseButtonDown(0)) {
recipient.SendMessage("OnTouchDown", hit.point, SendMessageOptions.DontRequireReceiver);
}
}
}
if (touchesOld != null) {
foreach (GameObject g in touchesOld) {
if (!touchList.Contains(g)) {
g.SendMessage("OnTouchExit", hit.point, SendMessageOptions.DontRequireReceiver);
}
}
}
#endif
if (Input.touchCount > 0) {
touchesOld = new GameObject[touchList.Count];
touchList.CopyTo(touchesOld);
touchList.Clear();
foreach (Touch touch in Input.touches) {
Ray ray = Camera.main.ScreenPointToRay(touch.position);
if (Physics.Raycast(ray, out hit, 100.0f, touchInputMask.value)) {
GameObject recipient = hit.transform.gameObject;
touchList.Add(recipient);
if (touch.phase == TouchPhase.Began) {
recipient.SendMessage("OnTouchDown", hit.point, SendMessageOptions.DontRequireReceiver);
}
if (touch.phase == TouchPhase.Ended) {
recipient.SendMessage("OnTouchUp", hit.point, SendMessageOptions.DontRequireReceiver);
}
if (touch.phase == TouchPhase.Stationary || touch.phase == TouchPhase.Moved) {
recipient.SendMessage("OnTouchDown", hit.point, SendMessageOptions.DontRequireReceiver);
}
if (touch.phase == TouchPhase.Canceled) {
recipient.SendMessage("OnTouchExit", hit.point, SendMessageOptions.DontRequireReceiver);
}
}
}
if (touchesOld != null) {
foreach (GameObject g in touchesOld) {
if (!touchList.Contains(g)) {
g.SendMessage("OnTouchExit", hit.point, SendMessageOptions.DontRequireReceiver);
}
}
}
}
}
Add this function to another script thats on the objects you want to be able to click
void OnTouchDown(object o) {
Debug.Log("wow");
}
Your answer

Follow this Question
Related Questions
Serialization depth limit exceeded 3 Answers
Unity web pallyer install problem 0 Answers
Unity 2018.1.6f1 Unity Package Manager Error 0 Answers
Parsing Error CS8025 1 Answer
Insert a semicolon error 1 Answer