Первое что бросается в глаза ошибка в условии:
if (Time.timeScale != 0)
{
if(Input.GetKeyDown(KeyCode.UpArrow))
{
SetUp(false);
}
else if(Input.GetKeyUp(KeyCode.UpArrow))
{
SetUp(false);
}
условие дублируется дважды, я так думаю во втором случае имелось ввиду KeyCode.DownArrow? тогда нужно в метод передать true и в методе менять ее на false
void Up()
{
Vector3 temp = transform.position;
temp.y = 4;
transform.position = temp;
Такая конструкция сразу перенесет объект в позицию с координатой Y = 4.
Для плавного перемещения используйте Translate:
transform.Translate(Vector3.up * Time.deltaTime, Space.World); // как пример из справки
Вот подробнее
http://docs.unity3d.com/Documentatio...Translate.html
И затем проверяйте условием достиг ли объект y=4. Если достиг то обнуляйте переменную up.
З.Ы. Писал без юнити под боком, но надеюсь идея понятна