Problems with scale and rotation

Hi, guys!

I’m making an array of functions which contains the changes that occur to the array of objects. Everything works, but not the way I want to. hehe)))
I would like to change the scale to less amount. But when I use floats (instead of 2), the script gives me errors.
The rotation is supposed to be 20 (50) degrees around a transform’s local Y axes. But it rotates 180 degrees most of the time.

If anyone can give me a clue how to make it work properly?
Thank you!

THE CODE:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class ChangeBlindness : MonoBehaviour {

``````public List<GameObject> currentObjects;

void Start () {

currentObjects = GetComponent<GenerateRoom> ().currentObjects;

}

void Update () {

if (Input.GetKeyDown (KeyCode.G)) {

int changeFunction = Random.Range (1, 7);
int randomArrayObj = Random.Range (0, currentObjects.Count);
Changes (changeFunction, currentObjects [randomArrayObj]);
}
}

void ChangePos1 (GameObject gameObject){
gameObject.transform.position = new Vector3 (gameObject.transform.position.x+1F, gameObject.transform.position.y,gameObject.transform.position.z);
}

void Rotate1 (GameObject gameObject){
gameObject.transform.rotation = new Quaternion (gameObject.transform.rotation.x, gameObject.transform.rotation.y+20F, gameObject.transform.rotation.z, Time.deltaTime);
}

void Scale1 (GameObject gameObject){
gameObject.transform.localScale = new Vector3 ( gameObject.transform.localScale.x *2, gameObject.transform.localScale.y *2, gameObject.transform.localScale.z *2);
}

void ChangePos2 (GameObject gameObject){
gameObject.transform.position = new Vector3 (gameObject.transform.position.x+1.5F, gameObject.transform.position.y,gameObject.transform.position.z);
}

void Rotate2 (GameObject gameObject){
gameObject.transform.rotation = new Quaternion (gameObject.transform.rotation.x, gameObject.transform.rotation.y+50F, gameObject.transform.rotation.z, Time.deltaTime);
}

void Scale2 (GameObject gameObject){
gameObject.transform.localScale = new Vector3 ( gameObject.transform.localScale.x /2, gameObject.transform.localScale.y /2, gameObject.transform.localScale.z /2);
}

void Changes (int n, GameObject obj2change) {

Debug.Log("Inside Changes function: " + obj2change.name);

switch(n) {

case 1: //ChangePos();

ChangePos1(obj2change);
Debug.Log("c1");

break;

case 2:  //Rotate();

Rotate1(obj2change);
Debug.Log("c2");

break;

case 3:  //Scale();

Scale1(obj2change);
Debug.Log("c3");

break;

case 4: //ChangePos();

ChangePos2(obj2change);
Debug.Log("c4");

break;

case 5:  //Rotate();

Rotate2(obj2change);
Debug.Log("c5");

break;

case 6:  //Scale();

Scale2(obj2change);
Debug.Log("c6");

break;

}

}
``````

}

Hi, the problem here is that you are using Quaternion as if it’s x, y, z, and w components are degrees (or Euler angles), they are not. To declare a new Quaternion from Euler angles you can use Quaternion.Euler or you can get/set Euler angles in `transform.euler`. However, if you are simply trying to rotate an object you may be better off using the Rotate function in Transform.

thanx, bro!!!