Showing how to Model and UV Map a bit complicated plane for running on iOS, Android Devices using Bender 3d with Gamekit.
1. Insert your design as blender3D back ground
2. Create wing using box. Put mirror modifier. Then extrude the side face. Adjust nods on the way to form the shade. Finalize mirror modifier when finishes.
3. Create a cylinder and use extrude scale on the way to create fuselage and engines.
4. Repeat to do the back wing, join components together and give it name
5. Now to unwrap the model for texturing. Go to side ortho view and press 'B' to box select the under side half of the plane. Remove Top of wing faces from selection by Press 'Shift' and mouse right button.
6. Change to top view. Then click unwrap and use project from view.
7. Move the UV map for giving spaces for other parts' uv map.
8. Unwrap other parts of the plane
9. Overlap 2 sides of rudder for easier texturing in future.
10. export the uv map. open in Gimp2 or PhotoShop, paint plane skin
11. load image into Blender3d Texture. and Set the coordination as UV.
12. Select shadeless, for constant colouring.
13. Testing on Android and iOS, Check my other post / youtube for how to do this.
Blender 3D game engine provides location constraint to limit object in a certain area. However this was not implemented in the Gamekit package. I have to do some scripting to get around it. So my plane will not fly out of the screen. Below is the script and red bits are my explanations. This is apart of series tutorials to create a 2d arcade plane game using Blender 3D and gamekit. Check this blog for more details.
-------BELOW IS OnInit.lua--------------
--Global variable
--set touch move parameters
Sensitivity = 0.005
--invert = -1 -> is inverted
Invert = 1
Threshold=3.5
-- Plane Constrain parameter
Xmin = -0.87--This is the left boundary, adjust if necessary
Xmax = 0.87--This is the right boundary, adjust if necessary
--this function is to stop plane moving cross the boundary
function xMoveFilter(limitSignal,oldX)
if limitSignal == -1and oldX > 0then
return oldX
elseif limitSignal == -1and oldX < 0then
return0
elseif limitSignal == 1and oldX >0then
return0
elseif limitSignal ==1and oldX <0then
return oldX
end
return0
end
--this function is to determine whether plane is over the broundary
function XoverLimit(obj)
local vec3 = obj:getPosition()
if vec3.x < Xmin then
return-1
elseif vec3.x > Xmax then
return1
else
return0
end
end
--this function is for debug used to display plane position
function printPosition(obj)
local vec3 = obj:getPosition()
dPrintf("position x: " .. vec3.x)
dPrintf("position y: " .. vec3.y)
dPrintf("position z: " .. vec3.z)
end
function velocityCap(v,vmax)
if (v>vmax) then
return vmax
elseif (v < -vmax) then
return -vmax
elsereturn v
end
end
-------BELOW IS planeTouchMove.lua--------------
mouse=OgreKit.Mouse()
scene = OgreKit.getActiveScene()
play = scene:getObject("plane")
logicM = OgreKit.LogicManager()
myLogicObject = logicM:getObject("plane")
mySensor = myLogicObject:getSensor("Collision")
maxVelocity=0.08
mouse:capture()
--print current plane posistion on screen
printPosition(play)
--using threshold to filter out unwanted small touch movement
if ((mouse.xrel>Threshold or mouse.xrel<-Threshold)or(mouse.yrel>Threshold or mouse.yrel<-Threshold)and (not(play.touchBoundary))) then
velocityY=velocityCap((mouse.yrel) * Sensitivity, maxVelocity)
velocityX=velocityCap((mouse.xrel) * Sensitivity, maxVelocity)
--check if plane over screen boundary
limitSignal = XoverLimit(play)
--the X Y directions are swapped as the screen is in landscape
This is a follow up to the plane arcade game tutorial posted before. This time I added plane shooting bullet. For how to run it on real android device such as nexus 7, and ios devices, such as iPad. Please go to my youtube channel: http://www.youtube.com/user/hhhnzw. there are videos showing that.
1. if you continue from last tutorial first thing is to rename the Background image from Plane to background. it is confusing, as the aeroplane is also called plan.
2. Create an empty element. set its parent to plane. and move it to centre of the plane. and move down. so the Z axis' number is -0.1. Rename it as EmptyGunCentre.
3. Create a box, and scale smaller, it will become bullet. So pick a size as you think is proper. Rename it to bullet01.
4. Unwrap & export UV map from the box. and paint it to look like a bullet.
5.load the edited uv map in blender, and apply it to bullet element.
6. Put bullet on to layer 2, HIDDEN layer.
7. Pick the EmptyGunCentre, go to game logic editor to set it up like image below:
8. Turn on the hidden layer and pick the bullet. Then go to physics tab. Change type to dynamic. Change the min max velocity to 3.5. And lock Z axis.
9. Now pack the content in, and save the file. Test it on PC first. Then follow my other videos to run it on Android and IOS devices.
This demo showing how to create a rolling background as seen on arcade platform 2D/2.5D games using blender3D and gamekit. at the end test on a real android device Nexus 7.
Following are the Steps:
1. Create a 'mesh plane' rectangular as background
2. Move and Rotate Camera
3. Import pre-modelled Plane
4. Add shadeless material to background
5. Unwrap UV,1024 x 1024
6. export UV image
7. stitch background image on UV map in photoshop or gimp2
8. save the image
9. load image into texture under material
10. add game logic to camera and airplane
11. pack external data in file and save file
12. test on blender gamekit add-on using desktop
13. copy file into gamekit android package asset folder
14.open eclipse, change the file name reference in the main.java file
15. connect nexus 7 and run the test.