Unity实现一个morpher/blendShape

using UnityEngine;
using System.Collections;

[RequireComponent (typeof (MeshFilter))]
public class BlendShape : MonoBehaviour
{
    public Mesh[] meshs;
    #if UNITY_EDITOR
        public float[] weights;
    #else
        float[] weights;
    #endif

    bool isChange = false;
    void Start ()
    {
        weights = new float[meshs.Length];
        System.Array.Clear (weights,0,weights.Length);
        GetComponent<MeshFilter> ().mesh = meshs [0];
    }

    public void SetWeight(int argIndex,float argWeight)
    {
        weights [argIndex] = (argWeight > 1 ? 1: argWeight );
        isChange = true;
    }

    void Update()
    {
        UpdateMesh ();
    }

    void UpdateMesh()
    {
        #if UNITY_EDITOR
        #else
        if (!isChange) return;
        #endif

        Mesh mesh = GetComponent<MeshFilter>().mesh;

        Vector3[] vertices = new Vector3[meshs[0].vertices.Length];
        System.Array.Copy (meshs [0].vertices, vertices, vertices.Length);

        for (int w=1;w<weights.Length;w++)
        {
            if (weights[w] <= 0) continue;

            Vector3[] verticesT = meshs[w].vertices;

            int i = 0;
            while (i < vertices.Length)
            {
                vertices[i] = vertices[i] + (verticesT[i] -  meshs[0].vertices[i]) * weights[w];
                i++;
            }
        }
        mesh.vertices = vertices;
    }
}
时间: 2024-08-10 21:27:35

Unity实现一个morpher/blendShape的相关文章

unity 接触一个月的感受和心得

unity scrollview 遇到的问题 一个scrollview作为翻页,这样的效果调整. 一页上面有三个scrollview,这三个scrollview上的items不受下层整个页面的scrollview的裁剪,导致滚动的时候,上层items会从页面外面飞入.这个问题我还没有解决,这个问题只有第二次以及以后打开界面才会出现,第一次打开不会出现, 所以我断定是我在第一次关闭界面的时候有些内容没有释放导致的. 现在采用迂回战术,关闭的时候不关闭,而是隐藏,这样就不会出现这个问题了. 但是根本

unity插件开发——一个例子:简单的svn集成

在unity开发过程中,通常我们习惯性地在Windows操作系统下使用svn进行版本管理,而每次提交更新,都需要回到文件夹下的这种操作让人无法忍受.是不是可以集成svn到unity中呢?查了一圈unity store可以看到很多svn的第三方插件.考虑到我们只需要简单的功能,而且不希望加入额外复杂的代码,最后还是自己写一个插件.功能就是更新或者提交assets文件夹. 如果还没有svn对项目进行管理的,按照以下2步操作:     1.下载svn客户端,安装.     2.从svn版本库check

如何用Unity创建一个的简单的HoloLens 3D程序

注:本文提到的代码示例下载地址>How to create a Hello World 3D holographic app with Unity 之前我们有讲过一次如何在HoloLens中创建一个2D程序的,没看过或者忘记的同学可以看这里回忆一下^_^ 如果说上次的2D版就是个带了个HoloLens面具的UWP程序,那我们这次要做的呢可是正宗的3D程序哦. 先来看看我们要做些什么准备. 1. Visual Studio 2015 Update 3 2. Windows 10 (10.0.105

Hololens开发笔记之使用Unity开发一个简单的应用

一.Hololens概述 Hololens有以下特性 1.空间映射借助微软特殊定制的全息处理单元(HPU),HoloLens 实现了对周边环境的快速扫描和空间匹配.这保证了 HoloLens能够准确地在真实世界表面放置或展现全息图形内容,确保了核心的AR体验. 2.场景匹配HoloLens 设备能存储并识别环境信息,恢复和保持不同场景中的全息图像对象.当你离开当前房间再回来时,会发现原有放置的全息图像均会在正确的位置出现. 3.自然交互HoloLens 主要交互方式为凝视(Gaze).语音(Vo

[Unity实战]一个简单的任务系统(一)

对于任务系统来说,最重要的就是处理脚本之间的消息传递,所以任务系统的核心必定就是事件委托了.这里给出核心代码: using UnityEngine; using System.Collections; public class TaskCondition { public string id;//条件id public int nowAmount;//条件id的当前进度 public int targetAmount;//条件id的目标进度 public bool isFinish = fals

unity创建一个数组,让它随机输出数组里的东西

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Choice : MonoBehaviour { public Text tips; // Use this for initialization void Start () { } public void ChioceBtnEvent() { string[] Name

unity实现一个物体绕着某点旋转

transform.RotateAround(o.transform.position,Vector3.up,20*Time.deltaTime);transform.Rotate(Vector3.up, 20*Time.deltaTime, Space.World); RotateAround():让物体围绕招某点旋转,参数分别为,旋转的点坐标,旋转的方向,旋转的速度. Rotate():让物体自传,参数分别为:旋转的方向,旋转的速度,旋转的坐标系(世界坐标系和自身坐标系). 原文地址:htt

Unity Networking教程翻译(一)由零开始设置一个多人项目

?? Setting up a Multiplayer Project fromScratch 由零开始设置一个多人项目 This document describes steps to setup anew multiplayer project from nothing using the new networking system. Thisstep-by-step process is generic, but can be customized for many types ofmul

Unity 5.3 官方VR教程(二) 创建第一个VR项目

为了准备好学习使用Unity开发VR应用,我们首先要检查下自己的电脑硬件和软件配置是否满足要求.简单来说,显卡要NVIDIA GTX970或AMD290以上,CPU要Intel i5-459以上,内存8GB以上,要有两个USB3.0接口,一个USB2.0接口,一个HDMI 1.3接口. 注意在打开Unity前要把DK2连接好并开启. 在继续之前,打开Oculus Configuration Utility应用,并检查Demo Scene可以正常运行.注意在运行Demo Scene之前看可能需要在