您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
62 行
2.2 KiB
62 行
2.2 KiB
from mlagents_envs.side_channel import SideChannel, IncomingMessage, OutgoingMessage
|
|
import uuid
|
|
from typing import Dict, Optional, List
|
|
|
|
|
|
class FloatPropertiesChannel(SideChannel):
|
|
"""
|
|
This is the SideChannel for float properties shared with Unity.
|
|
You can modify the float properties of an environment with the commands
|
|
set_property, get_property and list_properties.
|
|
"""
|
|
|
|
def __init__(self, channel_id: uuid.UUID = None) -> None:
|
|
self._float_properties: Dict[str, float] = {}
|
|
if channel_id is None:
|
|
channel_id = uuid.UUID(("60ccf7d0-4f7e-11ea-b238-784f4387d1f7"))
|
|
super().__init__(channel_id)
|
|
|
|
def on_message_received(self, msg: IncomingMessage) -> None:
|
|
"""
|
|
Is called by the environment to the side channel. Can be called
|
|
multiple times per step if multiple messages are meant for that
|
|
SideChannel.
|
|
"""
|
|
k = msg.read_string()
|
|
v = msg.read_float32()
|
|
self._float_properties[k] = v
|
|
|
|
def set_property(self, key: str, value: float) -> None:
|
|
"""
|
|
Sets a property in the Unity Environment.
|
|
:param key: The string identifier of the property.
|
|
:param value: The float value of the property.
|
|
"""
|
|
self._float_properties[key] = value
|
|
msg = OutgoingMessage()
|
|
msg.write_string(key)
|
|
msg.write_float32(value)
|
|
super().queue_message_to_send(msg)
|
|
|
|
def get_property(self, key: str) -> Optional[float]:
|
|
"""
|
|
Gets a property in the Unity Environment. If the property was not
|
|
found, will return None.
|
|
:param key: The string identifier of the property.
|
|
:return: The float value of the property or None.
|
|
"""
|
|
return self._float_properties.get(key)
|
|
|
|
def list_properties(self) -> List[str]:
|
|
"""
|
|
Returns a list of all the string identifiers of the properties
|
|
currently present in the Unity Environment.
|
|
"""
|
|
return list(self._float_properties.keys())
|
|
|
|
def get_property_dict_copy(self) -> Dict[str, float]:
|
|
"""
|
|
Returns a copy of the float properties.
|
|
:return:
|
|
"""
|
|
return dict(self._float_properties)
|