 (s/def ::def-entity-args
   (s/cat
     :name symbol?
+    :scenes (s/? (s/coll-of string? :kind vector?))
     :tails (s/alt
              :single-arity ::tail-impl
              :n-arities (s/* (s/spec ::tail-impl)))))
 
 (defn- parse-def-form [args]
-  (as/qwik-conform [{:keys [name tails] :as spec} ::def-entity-args args]
+  (as/qwik-conform [{:keys [name tails scenes] :as spec} ::def-entity-args args]
     (let [qualified-name  (symbol
                             (c/name (ns-name *ns*))
                             (c/name name))


  After `defgetter` is evaluated, the var `name` will be bound to a getter function that will return the GameObject associated with `name`, or `nil` if no such GameObject exists. If the GameObject associatd with `name` changes, the getter function will subsequently return that new GameObject."
  [& args]
  (let [{:keys [name kw] :as init-spec} (parse-def-form args)]
    `(do (init-def ~(update init-spec :name #(list 'quote %)))
         (defn ^UnityEngine.GameObject ~name
           ([] (~name @world-ref))

                             1 :update)]
                     [k `(fn ~args ~@tail)])))
          init-spec (assoc fmap
                      :scenes (or scenes :all)
                      :kw qualified-kw
                      :name qualified-name)]
      init-spec)))
