Unity-Live2d(头发物理系统,小操作~c#代码折叠)

Unity-Live2D

概述:这是我学习Unity中Live2d的相关操作的一个笔记,欢迎各位同好和大牛的指点。(参考siki学院出的视频学的)

头发物理检测类

  • 首先我们得知道live2D模型的头发是分块的,通常会分为侧发,前发,后发三种,具体模型具体不同,目前我学习的这个模型是没有前发的,且两侧头发是分开的,所以就分为后发和左侧发,右侧发三种。
  • 然后是live2D的头发物理系统类:PhysicsHair;我们需要对不同的头发区块分别定义其的物理系统,范例代码如下:
//先于大类中定义出头发物理系统
private PhysicsHair physicsHairLeft;       //左侧方头发物理
private PhysicsHair physicsHairRight;       //右侧方头发物理
private PhysicsHair physicsHairBack;       //后方头发物理
//再于Start中实例化出来
physicsHairLeft = new PhysicsHair();
physicsHairRight = new PhysicsHair();
physicsHairBack = new PhysicsHair();
  • 接着我们需要套用一下物理运算,这里用到一个头发物理系统类内置的API:PhysicsHair.setup();这个API我们用它第二个重载,需要用到三个参数,第一个 是头发的长度,单位是公尺,会影响头发摆动的周期,第二个是头发受到的空气阻力,预设值是0.5f,范围是0到1,影响头发摆动速度的衰减,第三个是头发的重量,单位是千克,
    范例代码:
physicsHairLeft.setup(0.2f,0.5f,0.14f);

头发物理之输入参数

  • 这部分是对头发输入参数的一个初始化工作,具体由我们提供几个参数给内置的一个API,让其计算并挂载到我们的头发物理系统上(该过程写在Start中)
  • 这里我们用到了一个头发物理类的内置枚举类型:PhysicsHair.Src,其中有三种参数,功能如下:
    SRC_TO_X:头发横向摇摆
    SRC_TO_G_ANGLE:头发下垂
    SRC_TO_Y:头发下垂
  • 然后我们用到一个新的头发物理类中的方法PhysicsHair.addSrcParam();其中用到四个参数,第一个就是我们实例化出来的相应的枚举类型,第二个是输入参数所来源的区块id(即这个头发参数受什么区块的参数影响),第三个是该参数对头发的影响度,意为当参数改变时,头发受到多少倍的影响度的输入参数(这个参数目前不太会设置,就按照教程中的0.005走吧),第四个为改方法对参数影响的权重;
    下面代码举例:
//设置输入参数
//设置那一部分变动时进行哪种物理运算
PhysicsHair.Src srcX = PhysicsHair.Src.SRC_YO_X;     //横向摇摆,枚举实例化

physicsHairLeft.addSrcParam(srcX,"PAPAM_ANGLE_X",0.005f,1);

头发物理之输出参数

  • 类似于输入参数的设置,我们同样需要在Start中对输出参数进行一个初始化设置,方放也比较类似
  • 这里我们用到内置枚举类型PhysicsHair.Target,这里包含两种表现形式,一个是TARGET_FROM_ANGLE代表普通的输出摆动,一个是TARGET_FROM_ANGLE_V代表带有阻力的输出,这个阻力影响貌似还蛮大的 ,具体要用哪个,测试一下就好。
  • 然后是PhyscisHair内置的输出参数API,PhyscisHair.addTargetParam();里面用到的参数如下:第一个:是我们之前定义的输出参数所用到的Target变量,第二个:是我们所要影响的区块ID,第三个:依旧是影响度,第四个:也依旧是权重。

演示代码:

//设置输出表现
//表现形式
PhysicsHair.Target targetRight = PhysicsHair.Target.TARGET_FROM_ANGLE
physicsHairSideRight.addTargetParam(targetRight,"PARAM_HAIR_SIDE_R",0.005f,1);

头发实时更新

  • 如之前的各种操作,头发的摆动自然也是需要去实时更新模型参数的,这里我们用到了PhyscisHair.update();这个API,里面用到两个参数,第一个是我们需要更新的模型,第二个是更新时间,需要这个时间的原因是因为头发的物理系统内置的计算算法里,需要算一些物理内容,所以诸如加速度速度等东西的计算需要用到时间,这里的时间我们是用到live2d环境架构好以后的计时.
  • 这里重点说一下第二个参数,也就是时间,由于我们要使用的live2D架构好以后的时间与unity游戏启动计时存在一定误差,所以我们需要用到一个全新的API去得到这个时间:UtSystem.getUserTimeMSec();
    下面代码举例
long time = UtSystem.getUserTimeMSec();    //执行时间
physicsHairSideLeft.update(live2DModel,time);

c#代码折叠
由于这个头发这一部分内容相较有点多,还很乱,所以引进一个新的操作,代码折叠,可以将一部分写成完备功能的代码进行折叠,让代码更条理操作如下

     #region 折叠区块所命名
     折叠区代码内容
     #endregion

//注: 所有的实时更新语句都应该在其设置代码后面,而总体的模型更新应该位于最后

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# Unity实现2D角色运动 在Unity中实现2D角色运动,可以通过以下C#代码来控制: ```csharp using UnityEngine; public class PlayerMovement : MonoBehaviour { public float speed = 5f; // 水平移动速度 public float jumpForce = 700f; // 跳跃力度 private float moveInput; // 水平方向输入值 private bool facingRight = true; // 角色面朝方向,true为右 private Rigidbody2D rb; // 初始化 void Start () { rb = GetComponent<Rigidbody2D>(); } // 更新每帧 void Update () { // 获取水平方向输入值 moveInput = Input.GetAxis("Horizontal"); // 翻转角色面朝方向 if (facingRight == false && moveInput > 0) { Flip(); } else if (facingRight == true && moveInput < 0) { Flip(); } // 角色跳跃 if (Input.GetKeyDown(KeyCode.Space)) { rb.AddForce(new Vector2(0f, jumpForce)); } } // 固定物理更新 void FixedUpdate() { // 给刚体施加水平方向的力 rb.velocity = new Vector2(moveInput * speed, rb.velocity.y); } // 翻转角色面朝方向 void Flip() { facingRight = !facingRight; Vector3 scale = transform.localScale; scale.x *= -1; transform.localScale = scale; } } ``` 解析: 1. 引入UnityEngine命名空间,并声明PlayerMovement类。 2. 声明水平移动速度(speed)和跳跃力度(jumpForce)。 3. 声明私有变量(moveInput)存储水平方向的输入值。 4. 声明布尔变量(facingRight)表示角色的面朝方向,true表示面朝右。 5. 获取Rigidbody2D组件,提供物理属性和方法。 6. 初始化组件和数据。 7. 每帧更新输入和跳跃操作。 8. 在水平反向时,翻转面朝方向。 9. 在响应跳跃按键时,施加向上的力。 10. 在物理更新FixedUpdate()中,施加水平方向的力来移动角色。 11. 翻转函数Flip()用于翻转角色面朝方向。 以上代码可以在2D场景中的角色对象上添加PlayerMovement脚本,即可实现基本的角色运动控制。 这里只是一个示例,更高级的2D角色运动,通常需要类似的代码框架,但会依赖更多计算和技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值