As to your last question - yes, you can only use UCharacterMovementComponent, or a component derived from it, on an ACharacter derived actor. In all other cases you must derive from UPawnMovementComponent. Unfortunately, at the moment a lot of very useful and potentially generic functionality such as network replication is within ACharacter/UCharacterMovementComponent, so if needed you would need to write this yourself when using UPawnMovementComponent.