Gunakan objek sebagai variabel Driver
Saya memiliki fungsi untuk driver yang mengharapkan 2 objek sebagai argumen, dan saya tidak dapat menemukan cara untuk mengatur variabel sebagai ID Objek, hanya satu properti dari objek itu. Apakah itu mungkin?

Jawaban
Anda dapat mengatur driver ke jalur data dan menggunakan "nama" sebagai jalur, dengan biaya mendapatkan objek dari namanya.
Dengan pengaturan ini, objek dapat diganti namanya oleh pengguna dan driver tidak akan rusak.

Menggunakan depsgraph tersebut
Sejak upgrade ke 2.8, depsgraph adalah anggota dari driver lokal, seperti juga variabelnya. Lihat jawaban untuk
Bagaimana cara menggunakan tipe blok data yang berbeda untuk variabel driver?
menyiapkan ulang test driver.
Sebagai contoh, driver ada di "Cube". Objek "Lamp" ada dalam adegan, dan diteruskan sebagai objek yang dievaluasi ke pengemudi melalui depsgraph. Depsgraph juga bisa digunakan.

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>
Contoh untuk mengembalikan z global minimum dari semua objek lain di depsgraph. Metode @lemon dapat digunakan untuk nama objek. Opsi lain dapat memberi tag mereka melalui properti khusus atau akhiran nama awalan.
def test(self, *args, depsgraph=None, **kwargs):
z = min(o.matrix_world.translation.z for o in depsgraph.objects
if o != self)
return z
Properti penunjuk.
IMO cara terbaik untuk mengasosiasikan sebuah objek dengan yang lain adalah melalui properti pointer
bpy.types.Object.driver_obj1 = bpy.props.PointerProperty(type=bpy.types.Object)
yang dapat ditetapkan melalui skrip atau UI.
context.object.driver_object1 = context.scene.objects.get("Lamp")