Select the files you want to copy in the content browser, drag them over the folder for your new plugin and select "Copy Here"
We provide two buses as starting point for your bus, one normal bus and one bendy bus. Use the one that is suitable for your bus as reference and copy the "Setup Data Asset", the "Mod Info" and the bus blueprint, usually called VH_Manufacturer_BusModel, to your plugin folder.
Import your bus
Import the bus mesh by clicking the import button in the content browser or by dropping it into the plugin folder in of your bus in the content browser.
Use these import settings:
Animation Import Setting
Mesh Import Settings
Check if the skeleton was correctly imported
It is very important that the bus skeleton is setup in a specific way. The bus will not be drive able if the skeleton deviates from how unreal expects it.
Check if the skeleton fulfills the following criteria:
The root bone is at the center of the bus.
The root bone must not have any parent bones. It needs to be the root to all other bones.
The root bone has a location of 0,0,0, a rotation of 0,0,0 and a scale of 1,1,1. Small floating point deviations are fine, but it can easily happen, that the root bone comes with a 90° rotation or a scale is at 100 from your moddeling program, with those offsets you will not be able to drive the bus
The tire bones need to be direct children of the root bone
The tire bones need to have a specific orientation: X forward, Y right, Z up
The root bone is at the Center of the bus
The root bone is the parent bone to all other bones and the tire bones are directly parented to the root with no additional parents in between
The transform of the root bone as close to the identity transform as possible. Small floating point deviations are fine
Wheel bone orientation
Setup the bus blueprint for the new mesh
Open the blueprint you copied over to your plugin and replace the skeletal mesh used on the "Mesh" root component with the skeletal mesh you just imported. This should allow you to see your bus in the viewport of the blueprint.
Scroll down in the "Components" window until you find the "VehicleMovement (Inherited)" component
Select it and search for the "Wheel Setups" list in the details
Expand the list and check if the "Bone Name" entries correspond with the bone names in the skeleton of your bus, if not change the entries to the ones used in your skeleton.
Check if the parent sockets of the wheel static meshes are set to the wheel bones of the bus
Replace the skeletal mesh component
Vehicle Movement Component
The minimal bus physics asset will only enable the bus to drive, it will be extended in the full bus setup.
The physics asset for the bus was created on import. Unreal automatically creates some colliders for you, but they are not needed and you can delete the to get a clean physics asset. After deleting all colliders add a box collider to the root and a sphere collider to each wheel. For the initial setup the don't need to fit the bus perfectly yet, but we recommend, that you setup your root collider as bus floor collider. The game checks if you are inside a bus by checking what is below you. Certain actions, like boarding the bus, are only active if the game thinks your are inside a bus.
On the box colliders attached to the root, make sure under Collision the Simulation Generates Collision Events is checked.
Root bone collider settings
Simple Collision Physics Material
Wheel bone collider settings
Simple Collision Physics Material
Setup bus boarding point
We use a bone location to mark the boarding point to the bus, in most buses we use the DriverDoor bone. If you already have the full skeleton setup done you can skip to the connect bone to action step.
Add socket as boarding point
In the skeleton asset of the bus add a socket to the root bone and give it a name like "DriverDoor" or "BoardingInteractible". Move this bone to the cockpit area so you can board by interacting with the boarding area.
Connect bone to action
We need to tell the bus that if a user interacts with a specific bone it should trigger a specific action, in this case if the user interacts with the cockpit area it should trigger the boarding action and allow the user to drive the bus. To set this up open the bus blueprint and search for the SkeletalMeshInteractible component in the components window. You will see there are already a couple mappings between bone name and interaction setup. Either add a new entry or edit an existing one, type the name of the bone/socket into the textbox and select "InteractibleType_BusBoarding" as interactible type.
Testing and Troubleshooting
Testing if the minimal setup works if fairly straight forward:
many errors are connected to the incorrect skeletons, check the checklist again to see if everything is setup correctly
check if the wheel setup in the Vehicle Movement component references the correct bones
The bus sits nicely on the floor, but you can't board it
check if the bus boarding interactible is correctly setup
check your collider setup, you can only board the bus when the game thinks you are inside a bus. Make the root collider you created before into a floor collider, once the game sees a bus below your feet it will allow you to board a bus.