On Click Add Listener not working on Game Object

I have this code attached to a 3D cylinder game object. I plan to use it as an arrow and rotate it when clicked and dragged. I had no idea what do as I am a beginner so I started with adding an onClick listener to a Button component on the Cylinder, and wrote this script which I added as component to the cylinder… But the Rotate() function isn’t called when I click on it, as there is no message in the Log… This is the code:

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

public class MoveAim : MonoBehaviour {

	public bool isAiming;

	public float rotationSpeed = 50.0f;
	private float maxLeftAngle = 85.0f;
	private float maxRightAngle = 275.0f;
	private Button button;


	void Start () {
		isAiming = true;
		button = GetComponent <Button>();
		button.onClick.AddListener (Rotate);
		Debug.Log ("Start!");
	}

	void FixedUpdate () {
	}
	void Rotate() {
		Debug.Log ("Click recorded");
	}

}

Any idea what to do? And how should I implement the rotation of the cylinder? Help would be appreciated!

Thanks!

as far as im concerned UI.Buttons needs to be inside of a lambda function.
try doing this instead
and no, do not use this in an update.

void Start()
{   
button.onClick.AddListener( () =>
    {
    Rotate();
    });
}

Buttons need to be under a UI Canvas and there must be an event system in your scene (Just right-click and create UI button and you’ll see what all needs to be added). That’s if you actually want this to be controlled by a button. If not then you need to add a collider trigger to your game object and in the script attached to the game object you’ll use one of the OnMouseXXX Monobehaviour events, likely OnMouseDown to start rotating an OnMouseUp to stop rotating.

You should use the void Update() method to check for button clicks for example:

void Update(){
      if (Input.GetMouseButtonDown(0))
                 Rotate();
                 Debug.Log("Rotate Started");
}

Hey man, try this:


button.onClick.AddListener(delegate(){Rotate();});

Also, I’m pretty sure Unity does not like it when you put a function in a function, It seems you put the Rotate function in the FixedUpdate function. If you want it to happen multiple times, you should use an coroutine. If you are not familiar with it, I’m happy to help

Good Luck.