move character controller with collision

Hi,
i want to move a character (which has a rigidbody). (left, right, up and down).
But I dont want to move using the keyboard. (i have a ps2 console connected with arduino, that sends the commands to unity).
i want to use transform.position like this :

var forward : Vector3 = transform.TransformDirection(Vector3.forward);

if (up == true){
Character.transform.position += Character.transform.forward * speed;
}

so, if i rotate my character and move forward, i’m moving forward from the characters perspective.
but if you use transform.position, the colliders dont work. My character can walk true the walls…
Now if you use something like :

moveDirection = new Vector3(Input.GetAxis(“Horizontal”), 0, Input.GetAxis(“Vertical”));

moveDirection = transform.TransformDirection(moveDirection);

if(up == true){
moveDirection.z = speed;
}

the collision works, and i cant walk true walls. But now if I rotate and go forward, i’m not going forward from the characters perspective. I just move on the Z axis.

So how can i use the transform.position, but keep the colliders?

remove if(up == true){ moveDirection.z = speed;

didn’t test but try this.

moveDirection = new Vector3(Input.GetAxis(“Horizontal”), 0, Input.GetAxis(“Vertical”));

moveDirection = transform.TransformDirection(moveDirection);

moveDirection *= speed;

edit: controller.Move(moveDirection * Time.deltaTime);

I’m having a bit the same problem like here :

The object that moves, has to collide with everything else in the world. (all other stuff are c4d imports with mesh colliders).
But i dont need the methods like OnControllerColliderHit. I dont have to do anything with these collision. Only that the object doesnt go true walls etc.

i dont think this is possible. The values i get for direction from Arduino are just strings. “left”, “right”, “up”, “down”. I read these strings, and if i receive “up”, the up boolean get sets on true…

I dont know if i can set these values in the input manager…