Задача такая отсылаю по osc координаты позиции X,Y,Z и вращения X,Y,Z - в Unity эти трансформации надо назначить костям.
Костей 20 поэтому скрипт сильно вырастает если описывать как сейчас. Позиция конечно не для всех костей нужна. Хотя бы для вращения разобраться.
Кто скажет что я лентяй - не могу посидеть подумать - тот будет прав, но если у кого есть время и может помочь - огромное спасибо.
Таким загадочным образом `1...20` и `1...120` я обозначил массивы элементов )
Сами кости будут добавляться уже в интерфейсе public var Bone1 : Transform;
Синтаксис:
Используется javascript
public var RemoteIP : String = "localhost";
public var SendToPort : int = 9000;
public var ListenerPort : int = 8000;
private var handler : Osc;
//Объекты которые будем трансформировать
public var Bone`1...20` : Transform;
//Сюда будем записывать принятые значения для трансформаций position X, Y, Z: rotation X, Y, Z.
private var sig`1...120` : float = 0;
public function Start ()
{
var udp : UDPPacketIO = GetComponent("UDPPacketIO");
udp.init(RemoteIP, SendToPort, ListenerPort);
handler = GetComponent("Osc");
handler.init(udp);
//Выбераем адрес позиции для текущей кости
handler.SetAddressHandler("/`1...20`/posX", Ex`1...20`posX);
handler.SetAddressHandler("/`1...20`/posY", Ex`1...20`posY);
handler.SetAddressHandler("/`1...20`/posZ", Ex`1...20`posZ);
//Выбераем адрес вращения для текущей кости
handler.SetAddressHandler("/`1...20`/rotX", Ex`1...20`rotX);
handler.SetAddressHandler("/`1...20`/rotY", Ex`1...20`rotY);
handler.SetAddressHandler("/`1...20`/rotZ", Ex`1...20`rotZ);
}
function Update () {
//Записываем вектор позиции
var ex`1...20`pos = Vector3(sig`1...120`,sig`2...120`,sig`3...120`);
//Записываем ектор вращения
var ex`1...20`rot = Vector3(sig`4...120`,sig`5...120`,sig`6...120`);
//Трансформируем данную кость по полученным значениям
Bone`1...20`.transform.position = Vector3.Lerp(Bone`1...20`.transform.position, ex`1...20`pos, Time.deltaTime);
Bone`1...20`.transform.eulerAngles = ex`1...20`rot;
}
//Записываем в sig трансформацию для данной кости
public function Ex`1...20`posX(oscMessage : OscMessage) : void
{
sig`1...120` = oscMessage.Values[0];
}
public function Ex`1...20`posY(oscMessage : OscMessage) : void
{
sig`2...120` = oscMessage.Values[0];
}
public function Ex`1...20`posZ(oscMessage : OscMessage) : void
{
sig`3...120` = oscMessage.Values[0];
}
public function Ex`1...20`rotX(oscMessage : OscMessage) : void
{
sig`4...120` = oscMessage.Values[0];
}
public function Ex`1...20`rotY(oscMessage : OscMessage) : void
{
sig`5...120` = oscMessage.Values[0];
}
public function Ex`1...20`rotZ(oscMessage : OscMessage) : void
{
sig`6...120` = oscMessage.Values[0];
}
public var SendToPort : int = 9000;
public var ListenerPort : int = 8000;
private var handler : Osc;
//Объекты которые будем трансформировать
public var Bone`1...20` : Transform;
//Сюда будем записывать принятые значения для трансформаций position X, Y, Z: rotation X, Y, Z.
private var sig`1...120` : float = 0;
public function Start ()
{
var udp : UDPPacketIO = GetComponent("UDPPacketIO");
udp.init(RemoteIP, SendToPort, ListenerPort);
handler = GetComponent("Osc");
handler.init(udp);
//Выбераем адрес позиции для текущей кости
handler.SetAddressHandler("/`1...20`/posX", Ex`1...20`posX);
handler.SetAddressHandler("/`1...20`/posY", Ex`1...20`posY);
handler.SetAddressHandler("/`1...20`/posZ", Ex`1...20`posZ);
//Выбераем адрес вращения для текущей кости
handler.SetAddressHandler("/`1...20`/rotX", Ex`1...20`rotX);
handler.SetAddressHandler("/`1...20`/rotY", Ex`1...20`rotY);
handler.SetAddressHandler("/`1...20`/rotZ", Ex`1...20`rotZ);
}
function Update () {
//Записываем вектор позиции
var ex`1...20`pos = Vector3(sig`1...120`,sig`2...120`,sig`3...120`);
//Записываем ектор вращения
var ex`1...20`rot = Vector3(sig`4...120`,sig`5...120`,sig`6...120`);
//Трансформируем данную кость по полученным значениям
Bone`1...20`.transform.position = Vector3.Lerp(Bone`1...20`.transform.position, ex`1...20`pos, Time.deltaTime);
Bone`1...20`.transform.eulerAngles = ex`1...20`rot;
}
//Записываем в sig трансформацию для данной кости
public function Ex`1...20`posX(oscMessage : OscMessage) : void
{
sig`1...120` = oscMessage.Values[0];
}
public function Ex`1...20`posY(oscMessage : OscMessage) : void
{
sig`2...120` = oscMessage.Values[0];
}
public function Ex`1...20`posZ(oscMessage : OscMessage) : void
{
sig`3...120` = oscMessage.Values[0];
}
public function Ex`1...20`rotX(oscMessage : OscMessage) : void
{
sig`4...120` = oscMessage.Values[0];
}
public function Ex`1...20`rotY(oscMessage : OscMessage) : void
{
sig`5...120` = oscMessage.Values[0];
}
public function Ex`1...20`rotZ(oscMessage : OscMessage) : void
{
sig`6...120` = oscMessage.Values[0];
}
А это пример для одной кости
Синтаксис:
Используется javascript
public var RemoteIP : String = "localhost";
public var SendToPort : int = 9000;
public var ListenerPort : int = 8000;
private var handler : Osc;
//Объекты которые будем трансформировать
public var Bone1 : Transform;
//Сюда будем записывать принятые значения для трансформаций position X, Y, Z: rotation X, Y, Z.
private var sig1 : float = 0;
private var sig2 : float = 0;
private var sig3 : float = 0;
private var sig4 : float = 0;
private var sig5 : float = 0;
private var sig6 : float = 0;
public function Start ()
{
var udp : UDPPacketIO = GetComponent("UDPPacketIO");
udp.init(RemoteIP, SendToPort, ListenerPort);
handler = GetComponent("Osc");
handler.init(udp);
//Выбераем адрес позиции для текущей кости
handler.SetAddressHandler("/1/posX", Ex1posX);
handler.SetAddressHandler("/1/posY", Ex1posY);
handler.SetAddressHandler("/1/posZ", Ex1posZ);
//Выбераем адрес вращения для текущей кости
handler.SetAddressHandler("/1/rotX", Ex1rotX);
handler.SetAddressHandler("/1/rotY", Ex1rotY);
handler.SetAddressHandler("/1/rotZ", Ex1rotZ);
}
function Update () {
//Записываем вектор позиции
var ex1pos = Vector3(sig1,sig2,sig3);
//Записываем ектор вращения
var ex1rot = Vector3(sig4,sig5,sig6);
//Трансформируем данную кость по полученным значениям
Bone1.transform.position = Vector3.Lerp(Bone1.transform.position, ex1pos, Time.deltaTime);
Bone1.transform.eulerAngles = ex1rot;
}
//Записываем в sig трансформацию для данной кости
public function Ex1posX(oscMessage : OscMessage) : void
{
sig1 = oscMessage.Values[0];
}
public function Ex1posY(oscMessage : OscMessage) : void
{
sig2 = oscMessage.Values[0];
}
public function Ex1posZ(oscMessage : OscMessage) : void
{
sig3 = oscMessage.Values[0];
}
public function Ex1rotX(oscMessage : OscMessage) : void
{
sig4 = oscMessage.Values[0];
}
public function Ex1rotY(oscMessage : OscMessage) : void
{
sig5 = oscMessage.Values[0];
}
public function Ex1rotZ(oscMessage : OscMessage) : void
{
sig6 = oscMessage.Values[0];
}
public var SendToPort : int = 9000;
public var ListenerPort : int = 8000;
private var handler : Osc;
//Объекты которые будем трансформировать
public var Bone1 : Transform;
//Сюда будем записывать принятые значения для трансформаций position X, Y, Z: rotation X, Y, Z.
private var sig1 : float = 0;
private var sig2 : float = 0;
private var sig3 : float = 0;
private var sig4 : float = 0;
private var sig5 : float = 0;
private var sig6 : float = 0;
public function Start ()
{
var udp : UDPPacketIO = GetComponent("UDPPacketIO");
udp.init(RemoteIP, SendToPort, ListenerPort);
handler = GetComponent("Osc");
handler.init(udp);
//Выбераем адрес позиции для текущей кости
handler.SetAddressHandler("/1/posX", Ex1posX);
handler.SetAddressHandler("/1/posY", Ex1posY);
handler.SetAddressHandler("/1/posZ", Ex1posZ);
//Выбераем адрес вращения для текущей кости
handler.SetAddressHandler("/1/rotX", Ex1rotX);
handler.SetAddressHandler("/1/rotY", Ex1rotY);
handler.SetAddressHandler("/1/rotZ", Ex1rotZ);
}
function Update () {
//Записываем вектор позиции
var ex1pos = Vector3(sig1,sig2,sig3);
//Записываем ектор вращения
var ex1rot = Vector3(sig4,sig5,sig6);
//Трансформируем данную кость по полученным значениям
Bone1.transform.position = Vector3.Lerp(Bone1.transform.position, ex1pos, Time.deltaTime);
Bone1.transform.eulerAngles = ex1rot;
}
//Записываем в sig трансформацию для данной кости
public function Ex1posX(oscMessage : OscMessage) : void
{
sig1 = oscMessage.Values[0];
}
public function Ex1posY(oscMessage : OscMessage) : void
{
sig2 = oscMessage.Values[0];
}
public function Ex1posZ(oscMessage : OscMessage) : void
{
sig3 = oscMessage.Values[0];
}
public function Ex1rotX(oscMessage : OscMessage) : void
{
sig4 = oscMessage.Values[0];
}
public function Ex1rotY(oscMessage : OscMessage) : void
{
sig5 = oscMessage.Values[0];
}
public function Ex1rotZ(oscMessage : OscMessage) : void
{
sig6 = oscMessage.Values[0];
}