【Unity】让动画系统支持相对坐标

2023-11-08

假如你有一个很简单的动画,并且需要应用到许多物体上
但如果你挂载同一个动画到两个物体上,就会这样:
示意图

解决方案

(仅测试过 legacy 动画)

挂载此脚本到物体上:

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

/// <summary>
/// 此脚本使得在 Animation 中可以使用相对坐标
/// </summary>
[RequireComponent(typeof(Animation))]
public class RelativePositonForAnimation : MonoBehaviour 
{
    [HideInInspector] public Vector3 positon;
    private Vector3 startPosition;

	void Start () 
    {
        this.startPosition = this.transform.position;
	}
	
	
	void Update () 
    {
        Vector3 newPos = this.startPosition + this.positon;
        if(newPos != this.startPosition) //没有在动画中使用此脚本的情况
            this.transform.position = newPos;
	}
}

编辑动画时选择Relative Positon For Animation中的Position
动画编辑器

改完之后的效果:
效果图

加上这个脚本可以方便的显示相对坐标:
(放在 Editor文件夹中)

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

[CustomEditor(typeof(RelativePositonForAnimation))]
public class RelativePositionInspector : Editor 
{
    private RelativePositonForAnimation instance;
    private bool isShowing = false;
    private Vector3 startPositon;

    private void OnEnable()
    {
        this.instance = (RelativePositonForAnimation)this.target;
    }

    public override void OnInspectorGUI()
    {
        EditorGUILayout.BeginVertical();

        EditorGUILayout.LabelField("[Editor]Relative Position: ");
        ShowRelativePositon();
        if (GUILayout.Button(this.isShowing ? "Hide" : "Show"))
        {
            this.isShowing = !this.isShowing;
            if (this.isShowing)
                this.startPositon = instance.transform.position; //获取开始坐标
        }



        EditorGUILayout.EndVertical();
    }

    //显示相对坐标
    private void ShowRelativePositon()
    {
        if (this.isShowing)
        {
            EditorGUILayout.Vector3Field("Position", this.instance.transform.position - this.startPositon);
        }
    }
}

已知缺点:编辑时不能实时预览动画

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Unity】让动画系统支持相对坐标 的相关文章

  • “程序员转型管理:从擅长代码到掌控团队的踩坑总结”

    作为程序员 很多人会在职业生涯中考虑转型管理岗位 然而 这个转换并不容易 除了需要掌握管理方面的知识和技能外 还需要处理人际关系并带领团队一起前进 在这个过程中 很多人可能会踩到一些坑 以下是我总结的一些经验教训 一 控制欲 由于程序员需要

随机推荐

  • jquery ajax 防止注入,javascript-jQuery在ajax全局事件中注入数据

    我正在尝试在ajax请求中注入数据 但是它失败了 我也不知道为什么 我试图查看jQuery源代码 但仍然找不到为什么它不起作用 感谢任何帮助 这是代码 someElement ajaxSend function e req options
  • python项目加密(模型加密,文件加密),涵盖了多种方法以及代码实现

    Python作为动态语言一般是以源码方式进行部署的 这就意味着他人在部署机器上可以直接获取项目代码 可能给作者带来不必要的损失和风险 这就需要对代码进行加密或混淆 常规的几类加密 混淆 方式如下 编译为pyc文件 将项目代码打包成pytho
  • 我的Substance Designer 学习笔记02-PBR材质学习理解

    首先定义PBR Physics based rendering 基于物理的渲染 由来 2012年迪士尼公司在技术论坛发布的文章 讲述自己作品的制作流程 2014年被某大佬提出简化版本的制作流程 优化后只用5中材质通道 BSDF 双向散射率分
  • C++实验02(02)华氏温度转换为摄氏温度

    题目描述 编写一个函数convert 把华氏温度转换为摄氏温度 转换公式为 C F 32 5 9 要求用内联函数实现 在main 中调用该函数 说明 F为double型 输入描述 华氏温度 输出描述 摄氏温度 输入样例 100 输出样例 华
  • 单线双线多线服务器有哪些区别

    单线双线多线服务器有哪些区别 服务器托管是我们现在当下比较常用的一种方式 越来越多的企业及站长 他们都会选择服务器托管 这不仅可以减少企业的维护时间成本 也可以让网站或者平台能够得到更多的专业技术支持 那么 在服务器托管中 我们经常会遇到单
  • jenkins+fastlane+git+cocoapods实现iOS持续集成踩坑记录

    前提 本项目在配置jenkins前已配置安装fastlane并自动上传蒲公英 关于fastlane的使用不在本文讨论范围之内 安装Jenkins jenkins有几种方式安装 一种是去官网下载dmg安装包 还可以下载 war文件 通过执行命
  • 整理一下react的知识点之redux-devtools-extension基本使用(持续更新)

    1 下载相关包 npm i redux react redux redux thunk redux devtools extension 2 安装react开发工具 chrome浏览器插件 3 安装redux的开发工具 chrome浏览器插
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 如何用ChatGPT辅助写论文

    ChatGPT先进功能创造了巨大的需求 该AI工具在推出后的两个月内就积累了超过1亿用户 最突出的功能之一是它能够在几秒钟内编写各种文本 包括歌曲 诗歌 睡前故事和散文 但是ChatGPT可以做的不仅仅是写一篇文章 更有用的是它如何帮助指导
  • 什么是IOC和DI?DI是如何实现的?

    什么是IOC和DI DI是如何实现的 IOC Inversion of Control 叫控制反转 DI Dependency Injection 叫依赖注入 是对IOC更简单的诠释 IOC 控制反转是把传统上由程序代码直接操控的对象的调用
  • IDEA上传代码到Gitee

    提示 这里可以使IDEA上传代码到Gitee 需要自己手动操作 目录 前言 一 打开Gitee官网 进行注册登录 1 登录进去找到右上角添加仓库 进行所示图操作 二 启动IDEA 1 IDEA关联Gitee 2 找到git下载好git程序
  • SPI协议的verilog实现:利用spi协议配置寄存器

    状态机状态跳转图 因常常需要对寄存器进行配置 因而学习了V3学院的视频课 利用spi协议对寄存器进行配置 在此做个记录 以便日后回顾 上图为状态机状态转移图 需要先将需要配置的寄存器的信息存放在ROM中 然后将数据读出来 通过SPI协议发送
  • Vue3快速入门教程

    学某个新技能时 大多数人倾向于 一开始就从头到尾完整学一遍 甚至有人翻来覆去重复学很多遍也达不到熟记于心 我个人认为 这不是最好的办法 我的建议的是 面向需求 or 面向问题来学习 最开始你可能不了解你要实现的效果会涉及哪些技术知识点 那么
  • 六十七.深度优先遍历C语言实现(有向图)

    include
  • ApplicationContext类继承设计

    先上类图 BeanFactory是Spring IoC的核心接口 BeanFactory相关的类设计可以看做是Spring的核心骨骼 为整个框架设计了一个基本的核心架构 但只有骨骼 没有血肉 也是不完整的 这样一个核心的骨架难以在实际开发中
  • 【知识蒸馏】Knowledge Review

    GiantPandaCV引言 知识回顾 KR 发现学生网络深层可以通过利用教师网络浅层特征进行学习 基于此提出了回顾机制 包括ABF和HCL两个模块 可以在很多分类任务上得到一致性的提升 摘要 知识蒸馏通过将知识从教师网络传递到学生网络 但
  • 【无关技术·朋友圈朝花朝拾】月相

    月相 月相是以日月黄经差度数 以下的度数就是日月黄经差值 来算的 农历每一天的月相都有自己的专门名字 详情请看https baike baidu com item 月相是日月黄经差度数 以下的度数就是日月黄经差值 来算的 共划分八种 新月
  • Java集合之LinedList

    LinedList类实现了List接口 他提供了 双向的 链表数据结构 在该链表中的每一个元素除了存储本身的内容之外还存储指向前一个元素的指针和指向后一个元素的指针 下图展示了一个包含三个元素的双向链表 每个链表都有一个头部 头部指向第一个
  • Jdk8 foreach语法需要break怎么办?

    forEach里的return只相当于continue 没有break语法 在这里我总结了3种解决方案供你选择 exception filter anyMatch forEach里的return只相当于continue 没有break语法
  • 【Unity】让动画系统支持相对坐标

    假如你有一个很简单的动画 并且需要应用到许多物体上 但如果你挂载同一个动画到两个物体上 就会这样 解决方案 仅测试过 legacy 动画 挂载此脚本到物体上 using System Collections using System Col