我目前正在进行RPG的图形化工作,非常类似于Runescape (旧学校),但我有自己的游戏系统。我不知道什么是最好的方式有可互换的装甲系统。我将创建低聚模型,正如我所说的,类似于runescape模型如这里,并希望有可能有随机变化的装甲,如这里。
据我所知,有两种方法,第一种是改变角色模型的网格,第二种是创建我的角色模型并使用骨骼权重来建立盔甲模型。我知道这里有关于第一个选项的整个话题(不能做第三个链接) forum.unity3d.com/threads/stitch-multiple-body-parts-into-one-character.16485/,,但真的吗?每一次关于类似事情的提问都会引出这个话题。但它就像8岁,对于团结2.0...Is,有更简单的方法来实现同样的结果,但不要学习大师的精疲力竭的解释,无论如何,我将无法实现。至于第二种方式,我找不到任何提示,除了手册和脚本的统一网站上的骨量,这是太普遍的方式,我的使用和我的技能。我花了几个小时寻找一些解决方案(教程),但谷歌一直在弹出相同的主题,这是4-8岁.
有什么建议,如何选择最好的方式更换盔甲,以及如何获得任何有关这些问题的知识?谢谢。
发布于 2017-05-31 13:14:57
所以,我在我的项目中做的是复制我的基本字符.blend文件(钻机,模型)和我删除大部分的网格,除了身体部分,我想为(胸部/腿部)。我把它拉出来一点,这样顶点就不会与基本网格重叠,只需保存它。
然后,在团结,我创建了一个新的预制件的模型,我刚刚保存。预制件的层次结构如下所示:带有BoneReplacer.cs脚本的父游戏对象、->子游戏对象和我衣服的蒙皮网格渲染器。
然后,我要做的就是把这个预制件拖到我的角色预制件上,所以这个脚本中的目标变量指向我角色的蒙皮网格渲染器。
这可能不是最好的方法,但它对我有效,也许它会帮助你把你的头脑,并创造一些更好的解决方案。
下面是BoneReplacer.cs脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BoneReplacer : MonoBehaviour
{
public GameObject target;
SkinnedMeshRenderer myRenderer;
Transform[] newBones;
SkinnedMeshRenderer targetRenderer;
Dictionary<string, Transform> boneMap = new Dictionary<string, Transform>();
void Start()
{
target = transform.parent.parent.gameObject;
targetRenderer = target.GetComponentInChildren<SkinnedMeshRenderer>();
foreach (Transform _bone in targetRenderer.bones)
{
boneMap[_bone.gameObject.name] = _bone;
}
myRenderer = gameObject.GetComponent<SkinnedMeshRenderer>();
newBones = new Transform[myRenderer.bones.Length];
for (int i = 0; i < myRenderer.bones.Length; i++)
{
GameObject _bone = myRenderer.bones[i].gameObject;
if (!boneMap.TryGetValue(_bone.name, out newBones[i]))
{
Debug.Log("Unable to map bone ~" + _bone.name + "~ to target skeleton!");
break;
}
}
myRenderer.bones = newBones;
myRenderer.rootBone = targetRenderer.rootBone;
}
}https://stackoverflow.com/questions/44245516
复制相似问题