Unity Transform.Posição não retornando a posição esperada -- unity campo com c# campo com transformation camp gamedev Relacionado O problema

Unity Transform.Position not returning expected position


1
vote

problema

português

Então, na minha cena hierarquia, tenho um objeto disposto a isso; -Nível 1 --Nível 2 ---Nível 3 ---- Nível4

Meu script é anexado ao objeto Level1. Quando tento encontrar a transformação.Posicionamento do nível4 por meio de debug.log para o console, eu recebo a posição de nível 1, e quando eu altero a posição de Nível4 NIDE3, os dados enviados para o console não muda ainda mostra a posição de nível1.

Eu não acredito que isso possa ser relevante, mas o que estou fazendo é um equipamento de IK para mover um membro do personagem. O objeto para o qual estou tentando encontrar a posição é aninhado dentro do esqueleto do personagem. O valor devolvido a mim é a posição do pré-fabricada colocada na cena. Todos os objetos (nível1 por nível4) não são explicitamente movidos, no entanto, eles herdam suas posições da rotação de seus pais.

Meu código para ler a posição é a seguinte:

  Debug.Log(object.position);    

Onde o objeto já é uma transformação. Eu também tentei:

  Debug.Log(object.transform.position);    

Mas ainda assim, tudo que recebo é a posição do pai de nível superior.

Obrigado por qualquer ajuda.

adição

OK, então para expandir a pergunta, vou explicar exatamente o que estou tentando fazer. Eu tenho o exemplo Mecanim e unidade 5.0.1f1. Eu tenho o projeto de exemplo Mecanim da loja de ativos e estou na cena do controlador de animador. Eu permiti a IK Pass na minha camada base e coloquei meu código no script "Idle Run Jump", anexado ao nível superior do objeto do jogo para o personagem jogável. Eu anexei um objeto de jogo vazio dentro do pé esquerdo para marcar a localização de onde o calcanhar esquerdo encontra o chão. Este objeto é anexado no inspetor a uma variável no script "Idle Run Salt", que recebe o IK Passe pela função Onanimatorik. Meu objetivo é conseguir o pé para seguir a mesma posição que outro objeto, onde a esquerda segue à esquerdaBoBJ. Meu código é o seguinte;

  using UnityEngine; using System.Collections;  public class pos : MonoBehaviour {      protected Animator animator;     public float offset = 0.156f;      public Transform leftFoot;     public Transform leftFootObj;      void OnAnimatorIK() {         if (animator == null)             return;          if (leftFoot != null) {             Debug.Log(leftFoot.position);             animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot,1);             animator.SetIKRotationWeight(AvatarIKGoal.LeftFoot,1);             animator.SetIKPosition(AvatarIKGoal.LeftFoot,(leftFootObj.position+(Vector3.up*offset)));             animator.SetIKRotation(AvatarIKGoal.LeftFoot,leftFootObj.rotation);         }             }      void Start ()      {         animator = GetComponent<Animator>();          if(animator.layerCount >= 2)             animator.SetLayerWeight(1, 1);     }  }    
Inglês Original

So in my scene hierarchy, I have an object laid out like so; -Level1 --Level2 ---Level3 ----Level4

My script is attached to the Level1 object. When I try to find the transform.position of Level4 by way of Debug.Log to the console, I get the position of Level1, and so when I change the position of Level4 inside Level3, the data sent to the console doesn't change, still shows the position of Level1.

I do not believe this may be relevant, but what I am doing is an IK rig to move a character's limb. The object for which I am attempting to find the position is nested inside the skeleton of the character. The value returned to me is the position of the prefab placed in the scene. All of the objects (Level1 through Level4) are not explicitly moved, however they inherit their positions from the rotation of their parent.

My code to read the position is as follows:

Debug.Log(object.position); 

Where object is already a transform. I have also tried:

Debug.Log(object.transform.position); 

But still, all I get is the position of the top level parent.

Thanks for any help.

ADDITION

Ok so to expand on the question, I'll explain exactly what I'm trying to do. I have the mecanim example and unity 5.0.1f1. I have the Mecanim Example project from the asset store and I'm in the animator controller scene. I have enabled IK pass on my base layer, and have placed my code in the "idle run jump" script, attached to the top level of the game object for the playable character. I have then attached an empty game object inside the left foot to mark the location of where the left heel meets the floor. This object is attached in the inspector to a variable in the "idle run jump" script, which then receives the ik pass through the function OnAnimatorIK. My aim is to get the foot to follow the same position as another object, where leftFoot follows leftFootObj. My code is as follows;

using UnityEngine; using System.Collections;  public class pos : MonoBehaviour {      protected Animator animator;     public float offset = 0.156f;      public Transform leftFoot;     public Transform leftFootObj;      void OnAnimatorIK() {         if (animator == null)             return;          if (leftFoot != null) {             Debug.Log(leftFoot.position);             animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot,1);             animator.SetIKRotationWeight(AvatarIKGoal.LeftFoot,1);             animator.SetIKPosition(AvatarIKGoal.LeftFoot,(leftFootObj.position+(Vector3.up*offset)));             animator.SetIKRotation(AvatarIKGoal.LeftFoot,leftFootObj.rotation);         }             }      void Start ()      {         animator = GetComponent<Animator>();          if(animator.layerCount >= 2)             animator.SetLayerWeight(1, 1);     }  } 
</div
        
         
         

Lista de respostas

1
 
vote

A posição do nível4 é dependente de todos os seus pais, se você quiser anexar seu script ao nível pai1, você pode ligar para o primeiro filho de um jogo de jogo por:

  this.transform.GetChild(0).transform.GetChid(0);    

Isso irá resolver o primeiro filho da criança do GameObject anexado ao script, se você quiser ir mais fundo, basta repetir a função. Se você gostaria de chamar a criança diretamente pelo nome em vez de usar esse método, basta usar:

  GameObject.Find(Level1/level2/level3/level4);    

e depois resolver sua transformação, ou o que você precisar dele.

 

The position of level4 is dependent of all its parents, if you want to attach your script to the parent level1, you can call the first child of a gameObject by :

this.transform.GetChild(0).transform.GetChid(0); 

This will address the first child of the child of the gameObject attached to the script, if you want to go deeper, just repeat the function. If you would like to call the child directly by Name instead of using this method, just use :

GameObject.Find(Level1/level2/level3/level4); 

and then address its transform, or whatever you need from it.

</div
 
 
     
     
0
 
vote

Apesar da minha resposta tardia esta resposta pode ser a solução que algumas pessoas estão procurando. Pode economizar horas de depuração, pois teria me salvado muito se eu encontrei uma resposta como essa. a resposta é pontos de pivô ruim.

Eu tive o mesmo problema em que os filhotes aninhados de um jogo de jogo tinham a mesma posição que o pai de nível superior. Na unidade, o ponto de pivô é mostrado no centro do GameObject. No entanto, isso pode não ser o caso no modelo real! Simplesmente, alterando a posição do alavaniador da ferramenta de center para pivot deve mostrar se os pontos de pivô são o problema aqui (que estava no meu caso).

O artista no meu fim tinha simplesmente destacado objetos para criar filhos, no entanto, o ponto de pivô não foi redefinido para ser uma posição zero da nova malha (criança). Ainda era o mesmo ponto do da malha anterior (pai). Isso resultou nos pontos de pivô de crianças aninhadas sendo as mesmas do pai.

Se você encontrar o mesmo problema, tripla verificar os pontos de pivô em seu software de modelagem antes de iniciar incontáveis ​​horas de depuração tentando descobrir o que é resultante da posição "falsa" ... enquanto o pivô simplesmente não está na posição esperada .

 

Despite my late reply this answer might be the solution that some people are looking for. It might save you hours of debugging as it would've saved me quite a lot if I found an answer like this. The answer is bad pivot points.

I had the same issue where the nested childs of a gameObject had the same position as the top level parent. In Unity the pivot point is default shown at the center of the gameObject. However this might not be the case in the actual model! Simply by toggling the tool handle position from Center to Pivot should show if pivot points are the issue here (which it was in my case).

The artist on my end had simply detached objects to create children, however the pivot point was not reset to be a zero position of the new mesh (child). It was still the same point as that of the previous mesh (parent). This resulted in the pivot points of nested children being the same as the parent.

If you encounter the same problem, triple check the pivot points in your modelling software before starting countless hours of debugging trying to figure out what is resulting the "fake" position... while the pivot simply isn't in expected position.

</div
 
 
   
   
0
 
vote

Eu causei essa questão para mim mesmo organizando meus objetos de jogo dentro de um objeto de jogo vazio que não tinha uma transformação x / y / z de zero. Definir que transformar x / y / z para zero e eu comecei a obter os números corretos novamente.

 

I caused this issue to myself by organizing my game objects within an empty game object that didn't have a transform x/y/z of zero. Set that transform x/y/z to zero, and I started getting the correct numbers again.

</div
 
 

Perguntas relacionadas

2  Bullet Physic: Transformar corpo depois de adicionar  ( Bullet physic transform body after adding ) 
Eu gostaria de transformar um rígido depois de adicioná-lo ao btdiscretedyamicsworld. Quando uso o cf_kinematic_object bandeira, sou capaz de transformá-lo,...

0  Como faço para obter uma origem global de Spherecolver em unidade?  ( How do i get a spherecolliders global origin in unity ) 
Eu estive seguindo este tutorial: compreensão Comportamentos de direção: evitação de colisão Mas estou tendo problemas para implementar uma das funções co...

0  transformação antes da divisão de perspectiva, mas depois de projetar perspectivamente  ( Transformation before the perspective divide but after projecting perspectively ) 
Meu problema é que eu gostaria de confinar uma cena renderizar a um retângulo (possivelmente girado) sem usar glViewport() . Eu não quero usá-lo para economi...

3  (unidade) move o mundo ou o personagem  ( Unity move the world or the character ) 
Estou fazendo um jogo como este: https://www.youtube.com/watch?v=ho7573lphqi Onde um navio 3D está voando em um plano 2D. Da perspectiva do jogador, o nav...

-1  Se o objeto é abaixo do outro objeto ... faça algo [fechado]  ( If object is bellow another object do something ) 
. FECHADO. Esta questão é off-tópico . Atualmente não está aceitando respostas. Quer melh...

4  Como traduzir gestos de furto em rotações?  ( How to translate swipe gestures into rotations ) 
Eu estou fazendo um jogo de cobra. Eu quero girar minha cobra na direção especificada por swiping na tela, as instruções são limitadas a ortogonals (increment...

2  Transformações normais adequadas do vetor no mapeamento normal  ( Proper normal vector transformations in normal mapping ) 
olá! Esta questão é sobre transformar vetores normais de mapas normais corretamente. Eu tentei métodos de mais de cinco fontes, ainda não consigo trabalhar...

3  SFML: Animação de Transformação de Escala Sprite  ( Sfml sprite scale transformation animation ) 
Existe alguma maneira de animar uma transformação no sf :: sprite como setscale ou setposition? ou seja: sprite.setScale(0.5f,0.5f); . Eu quero que a trans...

1  Vértices transformados têm eixo z errado  ( Transformed vertices have wrong z axis ) 
Por algum tempo eu tenho trabalhado no meu motor de jogo 3D aberto, para aprender como essas coisas funcionam. Você pode ver a base de código completo relacio...

0  Calcular vector3 Point Global projetando-o no espaço local usando unidade e c #?  ( Calculate vector3 global point projecting it in local space using unity and c ) 
Como projetar um vetor 3 localmente? Unity tem uma função especial para isso? Por exemplo, se A tem um gameobject que contém 2 crianças vector A (Transform)...

0  Desenhando um míssil em relação ao navio  ( Drawing a missile relative to the ship ) 
Eu estou desenhando meu navio pelo seguinte código e queria desenhar um míssil na ponta do navio, para que, quando clique em Barra de espaço, ela dispara esse...

0  Maneira comum de armazenar transformações do modelo  ( Common way to store model transformations ) 
Eu me pergunto qual é a melhor maneira de armazenar as transformações em uma classe de modelo. O que eu inventei é armazenar a tradução e dimensionar em um ve...

13  Como o problema bloqueado por gimbal está resolvido usando transformações de matriz acumuladas?  ( How is the gimbal locked problem solved using accumulative matrix transformation ) 
Estou lendo o livro "Aprendizagem de gráficos 3D de aprendizagem 3D" livro por Jason L. McKesson A partir de agora, estou até o problema de bloqueio gimbal ...

1  Distribuição uniformemente de 2 ou mais formas, dado seus pontos X e Y dentro de uma caixa delimitadora  ( Evenly distribution of 2 or more shapes given their x and y points inside a boun ) 
Eu tenho um conjunto de objetos moldados dinamicamente, como eu os distribuo horizontalmente ou verticalmente. Os objetos são cercados por uma caixa delimitad...

0  Simultaneamente traduzindo e rotando sprite em unidade  ( Simultaneously translating and rotating sprite in unity ) 
Eu tenho um objeto 2D (um arquivo PNG eu arrastei para a tela) que é um círculo que eu gostaria de mover para a esquerda e para a direita quando o lado corret...

0  No balanço Java, enquanto lia um jogo 2D de cima para baixo, como devo lidar com a redução de transformações de qualidade (principalmente rotação de tela)  ( In java swing while handling a 2d top down game how should i handle scaling fo ) 
Para o meu jogo de cima para baixo, pretendo ter rotação de tela onde as entidades não giram, mas tudo o mais acontece. Eu estou usando uma matriz raster para...

5  Como faço para lidar com erro de ponto flutuante, dado uma câmera distante?  ( How do i deal with floating point error given a far away camera ) 
Sempre que uma câmera está "distante" (sua localização é algum vetor "grande"), surge o problema ao renderizar objetos perto dele: é a perda de precisão cláss...

2  Como fazer sombras de projeção geométrica?  ( How to do geometric projection shadows ) 
Eu decidi que, desde que o mundo do meu jogo é principalmente plana, não preciso de melhores sombras do que projeções geométricas - pelo menos por enquanto. ...

2  Faça um objeto girar para enfrentar outro objeto em 2D  ( Make one object rotate to face another object in 2d ) 
No meu projeto 2D, eu tenho um objeto que às vezes é acima ou abaixo de outro objeto. Uma vez que o objeto principal chegar em estreita proximidade com o ob...

4  Faz questão de ordem de transformação de vetor?  ( Does vector transformation order matter ) 
Pergunta teórica - imagine um objeto de carro. Há duas (ou mais) 'forças' agindo neste carro, essas forças afetarão onde o carro vai dirigir. Mas as forças sã...

11  Shader de relatividade especial em GLSL  ( Special relativity shader in glsl ) 
Estou tentando implementar um shader GLSL que ajuda a entender a transformação especial da relatividade Lorentz. Vamos pegar dois observadores inerciais ali...

0  Como faço para trazer um objeto filho em sua posição original depois que é traduzido e girado?  ( How do i bring a child object in its original position after it is translated an ) 
. Esta é a posição original do cubo e seu cone de objeto filho. Aqui, traduzi o cone para 2 unidades agora eu girei o cubo pai em torno de 25 gra...

0  GameObject mantém o tamanho da câmera no jogo  ( Gameobject keeps snapping to camera size on play ) 
Estou no processo de fazer o meu jogo GameObject quando arrasto pela tela usando o toque. Mas minha questão atual é quando eu pressiono a reprodução para test...

3  Como e quando o modelo para o mundo, mundo para ver, os multiplicações de cetera acontecem?  ( How and when do the model to world world to view et cetera multiplications hap ) 
Eu aprendo as transformações de matriz para o design do jogo e luto com alguns conceitos básicos. Eu vejo a multiplicação real que ocorra antes de renderizar ...

3  Transformação de cisalhamento na matriz de projeção?  ( Shear transformation in the projection matrix ) 
Eu estou tentando entender o que a transformação de cisalhamento (L + R / R-L & AMP; B + T / T-B) está realmente fazendo na matriz de projeção? A única coi...

Perguntas relacionadas

2  Bullet Physic: Transformar corpo depois de adicionar 
0  Como faço para obter uma origem global de Spherecolver em unidade? 
0  transformação antes da divisão de perspectiva, mas depois de projetar perspectivamente 
3  (unidade) move o mundo ou o personagem 
-1  Se o objeto é abaixo do outro objeto ... faça algo [fechado] 
4  Como traduzir gestos de furto em rotações? 
2  Transformações normais adequadas do vetor no mapeamento normal 
3  SFML: Animação de Transformação de Escala Sprite 
1  Vértices transformados têm eixo z errado 
0  Calcular vector3 Point Global projetando-o no espaço local usando unidade e c #? 
0  Desenhando um míssil em relação ao navio 
0  Maneira comum de armazenar transformações do modelo 
13  Como o problema bloqueado por gimbal está resolvido usando transformações de matriz acumuladas? 
1  Distribuição uniformemente de 2 ou mais formas, dado seus pontos X e Y dentro de uma caixa delimitadora 
0  Simultaneamente traduzindo e rotando sprite em unidade 
0  No balanço Java, enquanto lia um jogo 2D de cima para baixo, como devo lidar com a redução de transformações de qualidade (principalmente rotação de tela) 
5  Como faço para lidar com erro de ponto flutuante, dado uma câmera distante? 
2  Como fazer sombras de projeção geométrica? 
2  Faça um objeto girar para enfrentar outro objeto em 2D 
4  Faz questão de ordem de transformação de vetor? 
11  Shader de relatividade especial em GLSL 
0  Como faço para trazer um objeto filho em sua posição original depois que é traduzido e girado? 
0  GameObject mantém o tamanho da câmera no jogo 
3  Como e quando o modelo para o mundo, mundo para ver, os multiplicações de cetera acontecem? 
3  Transformação de cisalhamento na matriz de projeção? 



© 2021 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.