Does Blender make Python scripts for its logic bricks?

Hi everyone,

I have made a several logic bricks for my game object in Blender game engine. Now I want to modify the logic bricks in Python code, and I am wondering how to do that. Can anyone tell me? :stuck_out_tongue:

Moved from “Support > Basics & Interface” to “Game Engine > Game Engine Support and Discussion”

sure, checkout gamelogic simple in the text editor templates

then check the python api.

a good start is

own.applyForce((own[‘Property’],0,0),1)

1 Like

This should help you, look at this link each time you have a question, before comming to the forums:
https://docs.blender.org/api/blender_python_api_current/bge.logic.html

The API should allow to do whatever you want, with a relative easiness.

Nothing wrong with asking questions.

Sometimes the API can get a bit confusing if you don’t know what you are doing… There are some examples on how to use Logic Bricks in Python here: http://bgepython.tutorialsforblender3d.com/

Or just come over to the Discord servers, there’s almost always someone that can help you (if you ask nicely :p) https://discord.gg/blender
(You will have to login and from there they will help you)

Yes, you can change the setup of logic bricks via a Custom Python controller.

What are you going to achieve?

Thank you all for the replies.

I just wanted to convert all the logic bricks to Python code, so I didn’t have to write the code from crash.

This is not possible and makes not much sense at all.

Just in case you think the BGE’s logic is running in Python - it is not.

The core of the BGE’s logic are the logic bricks. All bricks are native code which is configured via logic brick GUI.

The python controller is an option for you to create custom bricks (not native code) to get behavior that is not already provided by the existing logic bricks (for example: find the nearest detected object of a near sensor and set it as target for a trackTo actuator).

Yes, it is possible to reduce your game’s logic to a single sensor and a Python controller that handles all behavior. This is not very efficient and requires that you create nearly everything by yourself as you voluntarily renounce the existing options.

Python has more flexibility on Logic, but if you can do something just as well with Logic Bricks only, don’t hesitate to use them. There is no need to over complicate things. Python has the advantage that you can structure stuff better and change things on the fly, unlike Logic Bricks.

Sensors and controllers give you access to objects with python

1 [best] = One object using python managing a herd of entities using logic bricks

for enemy in enemyDictionary:
    Object = enemyDictionary[enemy]
    Object.controllers['Steer'].actuators['Steering'].target = own.scene.objects['A_Enemy']


2 [better] = Many objects running complex logic bricks

3 [worst] = many objects running always====python

I would take some time and learn about each sensors usage

(even when using python they are integral to only running scripts when necessary )

for instance

Collision sensor on ground ---------python [spawn enemies] end self

avoids enemies on the field consuming logic before the player is near them.

care to explain?

He means a lot of different objects running the same python script, I think. You could solve that by having a manager object that runs a script for each object. I think that’s what he meant

1 Like

lots of objects with an always sensor is bad. Due to always sensors are pretty heavy especially when it is in true pulse.

The sensor itself is not heavy. But it adds up.

x always sensor are faster than x+1 always sensors.

Then it depends on what the sensor triggers. If it triggers a controller that most of the time does nothing rather exiting the code, it is a waste of time. Not triggering a controller is faster than triggering a controller (regardless if it does something or not).

I suggest to use always + [True Level Triggering] only when there is no build-in sensor that can reduce the amount of executions.

Sorry to kick this old thread but I just wanted to add a different perspective to the prevailing sentiment that using Python is a bad idea. There are many reasons to not use a GUI when developing a game and they are outlined very well here (http://mikepan.com/GameEngineBook/text/07-Scripting.html#Why_Script_When_You_Can_Logic_Brick_It?) but just in case that link goes away I will reiterate the main points:

  • Sane Replacement for Large-Scale Logic-Bricked Objects
  • Better Handling of Multiple Objects
  • Access to Blender’s Advanced Features
  • Use Features That Are Not Part of Blender
  • Keep Track of Your Changes with a Version Control System
  • Debug Your Game While It Runs

Of all of these I think version control is the most important. Even from the simplest of projects you get huge benefits of being able to get back to a known working state.

1 script running in 1 object - processing 100’s of objects is much better design.

for enemy in enemyList:
   #do ai stuff

is much better than

always--------Do enemy stuff

in 100’s of enemies.

one can take it a step further and do


def Behavior_1(args):
    #do stuff

def Behavior_2(args):
   #do other stuff

#and so on

BehaviorDict = { "Behavior_1":Behavior_1, "Behavior_2":Behavior_2 ...etc}

def main():

    for object in trackedObjects:
        behaviors = object['Behaviors']
        for behavior in behaviors:
            key, args = behavior
            function = behaviorDict[key]
            function(args)

can run many types of objects (friendly units, enemy, puzzles etc)
and the behaviors can be modular.

(behaviors are a tuple (“Key”, args) )

I use python all the time, and it’s good.
just think about that every script you run adds some overhead.

On top of being a very flexible language, Python is easy to learn. Heck, some people even go as far as recommending it as a first programming language to begginers. Unless completely incapable of logical abstraction or just flat-out lazy, I don’t see reasons not to pick it up if you’re developing a game in Blender.

One thing I notice, with asset stores and new software pinky-promising that codeless game development is viable and that you don’t need to learn a thing to produce utterly complex programs, it’s tough to talk anyone out of the “code bad” mindset at this point. They’ve fed people these ideas to a downright ridonkulous degree, now they can’t see anything remotely technical as more than tedium and lots of unintelligible concepts that someone else ought to bother with.

Well, one argument is that it is simplier to learn/discover a visual language. Take this thread, despite having a visual programming language, it is almost exactly a 1 to 1 match with regular textual programming. The only difference here is that because you code in blocks, everything is statically known: you just scroll through the menus looking for the bloc you want, and drag it.

Its like documentation navigation right inside the development tool.

In Blender this doesn’t work very well because:

  1. Python is dynamically typed and it is hard to statically infer things
  2. Blender text editor is really dumb, despite all the efforts that went into it

So in my opinion what scares people is the “writing code out of thin air” part that is scary, as the builtin tools in Blender for Python are not really helping you discovering the language/API.

This is one of the reasons I love working with TypeScript for instance, because the tools are able to provide a lot of information right inside the IDE, almost never need to go see the documentation, and the type checking catches most basic mistakes.

Again, with the way Python has to be written in Blender, this is not the case. You are left alone writing what might or might not work… Not ideal.

But then as @stephen and others mentioned, there is only advantages to using Python, the only downside maybe is the learning curve, which is steep because of the poor tooling/assistance.

I think @UnidayStudio is working on an addon for UPBGE which would bring console errors somewhere in your UI, so it would be easier to access and better looking. That’s super cool :slight_smile:

I wasn’t taught programming with legos. They had us write C and COBOL, for Christ’s sake!
People find a blank on a text editor to be scary, they don’t know what real fear is.

That aside, each block on a GUI has code behind it – each block has to be coded.
So it’s not so much like a language you can learn and then expand on with libraries of your own.
And anything that doesn’t let you tinker and mess up badly is a horrible teaching tool.
Start by doing it badly… that’s how learning works. And there’s no way around it.