Это мой код, связанный с добавлением SCNNode:
void AddPlane(ARHitTestResult hitTestResult)
{
// Create a new scene
var scene = SCNScene.FromFile("art.scnassets/plane_banner.scn");
planeNode = scene.RootNode.FindChildNode("planeBanner", true);
planeNode.Position = new SCNVector3(hitTestResult.WorldTransform.Column3.X, hitTestResult.WorldTransform.Column3.Y, hitTestResult.WorldTransform.Column3.Z);
planeNode.Scale = new SCNVector3((float)0.005, (float)0.005, (float)0.005);
this.sceneView.Scene.RootNode.AddChildNode(planeNode);
// Pan gesture
tappedObjectNode = planeNode;
planeNode.Name = "planeBanner";
var panGestureRecognizer = new UIPanGestureRecognizer(move);
sceneView.AddGestureRecognizer(panGestureRecognizer);
}
Это мой метод " move ":
void move(UIPanGestureRecognizer sender)
{
if (movingNow)
{
CGPoint translation;
translation = sender.TranslationInView(sceneView);
SCNVector3 result = CGPointToSCNVector3(sceneView, tappedObjectNode.Position.Z, translation);
tappedObjectNode.Position = result;
}
var test = new NSDictionary();
var tapPosition = sender.LocationInView(this.View);
var hitNode = sceneView.HitTest(tapPosition, test);
if (hitNode != null && hitNode.Length > 0)
{
movingNow = true;
if(hitNode[0].Node.Name == "planeBanner"){
tappedObjectNode = hitNode[0].Node;
}
}
if(sender.State == UIGestureRecognizerState.Ended) {
}
}
вот метод, который янайдено во время поиска ответа для получения SCNVector3 из этой точки.
SCNVector3 CGPointToSCNVector3(SCNView aView, float aDepth, CGPoint aPoint)
{
var projectOrigin = aView.ProjectPoint(new SCNVector3(0, 0, aDepth));
var locationWithZ = new SCNVector3((float)aPoint.X, (float)aPoint.Y, projectOrigin.Z);
return aView.UnprojectPoint(locationWithZ);
}
Проблема в том, что когда я пытаюсь переместить объект, он начинает уменьшаться или начинает движение с очень левой частиscreen.
Я рассматриваю различные решения, но не могу найти ничего, что могло бы помочь в этом случае.
Может ли кто-нибудь помочь мне с этим?
Как я могу сделать идеальный подвижный объект в AR, используя Scenekit?