RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 943223
Accepted
Artik Slayer
Artik Slayer
Asked:2020-02-10 23:39:28 +0000 UTC2020-02-10 23:39:28 +0000 UTC 2020-02-10 23:39:28 +0000 UTC

为什么我的网格是平的并且位置变化?

  • 772

开始之前:(这是基础立方体)

在此处输入图像描述

开始后:(应该是一只眼睛(即一个球))

在此处输入图像描述

改造木桌:

在此处输入图像描述

编码:

成分资产:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "New Ingredient", menuName = "Ingredient")]
public class IngredientAsset : ScriptableObject {

    public Mesh ingredientMesh;

}

成分:

using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class Ingredient : MonoBehaviour {

    public IngredientAsset asset;
    


    public Ingredient (IngredientAsset a) {
        asset = a;
    }
    
    public bool HasIngrediend()
    {
        if (asset == null) {
            return false;
        } else {
            return true;
        }
    }

    public Mesh GetIngrediendMesh()
    {
        if (asset == null) {
            return null;
        }

        return asset.ingredientMesh;

    }


}

表框:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TableBox : MonoBehaviour {

    public MeshFilter overlay;

    public IngredientAsset ingredient;
    public EquipmentAsset equipment;
    
    private void Start()
    {
        if (ingredient!=null) {
            overlay.mesh = ingredient.ingredientMesh;
        } else if (equipment != null) {
            overlay.mesh = equipment.equipmentMesh;
        }
    }
    
    public void Interact(IngredientAsset c, EquipmentAsset t, PlayerInteraction player)
    {
        player.SetIngredient(ingredient);
        ingredient = c;
        player.SetEquipment(equipment);
        equipment = t;
        
        if (equipment != null)
            overlay.mesh = equipment.equipmentMesh;
        else if (ingredient != null)
            overlay.mesh = ingredient.ingredientMesh;
        else
            overlay.mesh = null;
    }
}

玩家互动:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerInteraction : MonoBehaviour {

    public GameObject target;
    
    public KeyCode interactKey;

    
    [SerializeField]
    private IngredientAsset ingredient;
    [SerializeField]
    private EquipmentAsset equipment;
    
    private void Update()
    {
        if (Input.GetKeyDown(interactKey))
        {
            if (target == null)
                return;
          
            TableBox table = target.GetComponent<TableBox>();
            if (table != null)
            {
                table.Interact(ingredient, equipment, this);
            }

        }
    }
    
    public void SetIngredient(IngredientAsset c)
    {
        ingredient = c;

    }

    
    public void SetEquipment(EquipmentAsset t)
    {
        equipment = t;

    }

    
    private void OnTriggerEnter(Collider col)
    {
        if (target != col.gameObject && target != null)
        {
            Deselect();
        }
        
        target = col.gameObject;
    
        }
    }
    
    private void OnTriggerExit(Collider col)
    {
        if (col.gameObject == target)
        {
            Deselect();
            target = null;
        }
    }
    
    void Deselect()
    {

    }
}

我的项目。

PS我的网格,与预制不同,是“裸露的”,如何将对象的其余组件从预制添加到网格中?(纹理、碰撞器等)

感谢您的关注!

unity3d
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    user302909
    2020-02-11T06:20:43Z2020-02-11T06:20:43Z

    问题源于对transform值的变换如何在父子关系中起作用的误解。

    让我们在真空中举个例子:

    在此处输入图像描述

    该问题假设层次结构中的“底部”子级将具有Scale = (1, 1, 1),这是绝对错误的。本地的 Scale将等于(1, 1, 1),但全局 Scale的将等于(0.5 * 0.25 * 1, 0.5 * 0.25 * 1, 0.5 * 0.25 * 1)。

    事实上,这里使用了矩阵,但我们不会用这个来重载问题,在矩阵乘法之后,我们将得到与我上面写的相同的结果。


    我们从问题来看情况:

    Tables - Scale(1, 1, 1)
      \____Table - Scale(0.7, 0.7, 0.1)
       \     \____Overlay - Scale(1, 1, 1)
        \____Table - Scale(0.7, 0.7, 0.1)
         \     \____Overlay - Scale(1, 1, 1)
          \....
    

    结果,经过所有矩阵变换后的世界Scale对象Overlay将等于:(0.7, 0.7, 0.1),当“眼睛”网格显然应该具有 时Scale = (1, 1, 1)。

    您可以通过 2 种方式解决问题:

    1. 要更改Scale对象Overlay以使其与Scale层次结构中的 'th 较高的对象具有相反的效果,在这种情况下,您需要设置以下值:

      (1/0.7, 1/0.7, 1/0.1) == (1.428, 1.428, 10)
      

      有一种方法可以做到这一点,但在这里我们遇到了各种讨厌的舍入和类型限制float。是的,而且您每次都必须手动设置所有这些,这很不方便、乏味并且会导致错误。

    2. 最初,请注意层次结构中的Scale'th 和其他组件Transform。在这种情况下,我认为最简单的方法是这样做:

      在此处输入图像描述

      那些。简单地分为具有尺度 (1, 1, 1) 的“两个阵营”对象和具有一些奇异尺度的对象。


    与 Transform.position 的情况完全相同,只是在那里发生了加法而不是矩阵乘法。如果你仔细观察,你的会Overlay沿着轴移动Z,4.63这导致了沿着轴的移动Z。

    • 3

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5