Hi Jeanfabre
ok ill give it a shot. Thanks for the guideance. I was using Blender (python) and managed to achieve this but do not understand Unity fully yet. Heres my code from that game if anyone knows python to convert? *ignore key controllers.
Thanks again
from bge import logic, events
#from bge import render
from mathutils import Vector
from math import pi
tic_rate = logic.getLogicTicRate()
gravity = 20
turn_speed = 0.05
move_speed = 2.5
jump_force = 500.0
up_key = events.UPARROWKEY
down_key = events.DOWNARROWKEY
left_key = events.LEFTARROWKEY
right_key = events.RIGHTARROWKEY
run_key = events.LEFTCTRLKEY
jump_key = events.XKEY
class Translation:
def __init__(self, own, sensors):
self.own = own
self.floor = own
self.col_floor = sensors[1]
self.velocity = Vector()
self.rotation = Vector()
self.force = Vector()
self.gravity = Vector((0, 0, -gravity))
self.normal = Vector((0, 0, 1))
def keyboard(self, just_activated=1, active=2):
events = logic.keyboard.events
left = events[left_key] is active
right = events[right_key] is active
up = events[up_key] is active
down = events[down_key] is active
jump = events[jump_key] is just_activated
move = up - down
turn = left - right
return turn, move, jump
def get_normal(self):
ori = self.own.worldOrientation
start = self.own.worldPosition
end = self.floor.worldPosition
# render.drawLine(start, end, [1, 1, 0])
hit_normal = self.own.rayCast(end, start, 1)[2]
if hit_normal:
self.normal = hit_normal
def main(self):
turn, move, jump = self.keyboard()
self.rotation.z = turn * turn_speed
if self.col_floor.positive:
self.floor = self.col_floor.hitObject
self.velocity.x = move * move_speed
self.force.z = jump * jump_force
self.get_normal()
self.own.localLinearVelocity.xy = self.velocity.xy
self.own.applyForce(self.force + self.gravity, True)
self.own.alignAxisToVect(self.normal, 2, move_speed / 20)
self.own.applyRotation(self.rotation, True)
def box(cont):
own = cont.owner
sensors = cont.sensors
if 'translation' not in own:
own['translation'] = Translation(own, sensors)
own['translation'].main()
def mesh(cont):
own = cont.owner
velocity = own.parent.localLinearVelocity.x
own.applyRotation([0, velocity * pi / 2 / tic_rate, 0], True)