개체를 드라이버 변수로 사용

Dec 04 2020

2 개의 개체를 인수로 예상하는 드라이버에 대한 함수가 있는데 변수를 개체 ID로 설정하는 방법을 찾을 수없고 해당 개체의 단일 속성 만 있습니다. 가능합니까?

답변

3 lemon Dec 05 2020 at 14:37

드라이버를 데이터 경로로 설정하고 이름에서 개체를 가져 오는 대신 "이름"을 경로로 사용할 수 있습니다.

이 설정을 사용하면 사용자가 개체의 이름을 바꿀 수 있으며 드라이버가 손상되지 않습니다.

4 batFINGER Dec 05 2020 at 17:50

depsgraph 사용

2.8로 업그레이드 한 이후 depsgraph는 변수와 마찬가지로 드라이버의 로컬 구성원입니다. 에 대한 답변보기

드라이버 변수에 다른 유형의 데이터 블록을 사용하는 방법은 무엇입니까?

테스트 드라이버를 다시 설정합니다.

예를 들어 드라이버는 "큐브"에 있습니다. "Lamp"개체는 장면에 있으며 평가 된 개체로 depsgraph를 통해 운전자에게 전달됩니다. 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>

depsgraph에있는 다른 모든 객체의 최소 전역 z를 반환하는 예제입니다. @lemon의 메서드를 개체 이름으로 사용할 수 있습니다. 다른 옵션은 사용자 정의 속성 또는 이름 접두사 접미사를 통해 태그를 지정할 수 있습니다.

def test(self, *args, depsgraph=None, **kwargs):

    z = min(o.matrix_world.translation.z for o in depsgraph.objects
    if o != self)

    return z  

포인터 속성.

IMO는 객체를 다른 객체와 연관시키는 가장 좋은 방법은 포인터 속성을 사용하는 것입니다.

bpy.types.Object.driver_obj1 = bpy.props.PointerProperty(type=bpy.types.Object)

스크립트 또는 UI를 통해 할당 할 수 있습니다.

context.object.driver_object1 = context.scene.objects.get("Lamp")