Użyj obiektu jako zmiennej sterownika
Mam funkcję dla sterownika, która oczekuje 2 obiektów jako argumentów i nie mogę znaleźć sposobu, aby ustawić zmienną jako identyfikator obiektu, tylko jedną właściwość tego obiektu. Czy to jest możliwe?

Odpowiedzi
Możesz ustawić sterownik na ścieżkę danych i użyć „nazwy” jako ścieżki, kosztem uzyskania obiektu z jego nazwy.
Dzięki temu ustawieniu użytkownik może zmienić nazwę obiektu, a sterownik nie zostanie uszkodzony.

Korzystanie z depsgraph
Od aktualizacji do wersji 2.8 depsgraph jest składnikiem lokalnych sterowników, podobnie jak zmienne. Zobacz odpowiedź do
Jak używać różnych typów bloków danych dla zmiennych sterownika?
ponowne ustawienie kierowcy testowego.
Na przykład sterownik znajduje się w „Cube”. Obiekt „Lampa” znajduje się w scenie i jest przekazywany kierowcy jako obiekt oceniany za pośrednictwem depsgraph. Można również użyć depsgraph.

def test(*args, depsgraph=None, **kwargs):
for arg in args:
print(arg)
print(depsgraph)
return -1 # a simple val to indicate working
<bpy_struct, Object("Cube") at 0x7f62fcbefa08, evaluated>
<bpy_struct, Object("Lamp") at 0x7f62fcbf0008, evaluated>
<bpy_struct, Depsgraph at 0x7f62faba6c08>
Przykład zwracania minimalnego globalnego z wszystkich innych obiektów w depsgraph. Do nazw obiektów można użyć metody @lemon. Innymi opcjami może być oznaczanie ich za pomocą właściwości niestandardowej lub sufiksu przedrostka nazwy.
def test(self, *args, depsgraph=None, **kwargs):
z = min(o.matrix_world.translation.z for o in depsgraph.objects
if o != self)
return z
Pointerproperties.
IMO Najlepszym sposobem na powiązanie obiektu (ów) z innym jest użycie właściwości wskaźnika
bpy.types.Object.driver_obj1 = bpy.props.PointerProperty(type=bpy.types.Object)
które można przypisać za pomocą skryptu lub interfejsu użytkownika.
context.object.driver_object1 = context.scene.objects.get("Lamp")