Unity动画☀️6. 翻越障碍物、Vector3.up、射线Physics.Raycast()、Character Controller

在这里插入图片描述

1️⃣ 设置动画Valt、Bool条件,定义只有速度大于3才可翻越障碍物

2️⃣ 控制思路:

0.3米处,墙是密封的,栏杆处没有任何物体,可通过检测0.3m处人物与墙和栏杆之间的关系,来确定人物应该跳跃还是滑行

0.3m是通过与标准cube估算得出的,也可是其他合适数值

 3️⃣ 关键代码释义:

Vector3.up——Vector3(0,1,0)的简码,即Y轴

bool Physics.Raycast(Vector3 origin,Vector3 direction,out RaycastHit hitInfo,float maxDistance)

射线是3D世界中一个点向一个方向发射的一条无终点的线。在发射的轨迹中,一旦与其他物体发生碰撞,它就会停止。Physics.Raycast(起点位置,方向,hitInfo为存储的射线碰撞到的第一个对象的信息,检测距离)是一个布尔值,若在检测距离内碰撞到物体,结果为true,否则为false

4️⃣ 代码

using UnityEngine;

public class Player : MonoBehaviour {

    private Animator anim;
    private int speedRotateID = Animator.StringToHash("SpeedRotate");
    private int speedZID = Animator.StringToHash("SpeedZ");
    int vaultID = Animator.StringToHash("Vault");

    void Start () {
        anim = GetComponent<Animator>();
	}
	
	void Update () {

        anim.SetFloat(speedZID, Input.GetAxis("Vertical") * 4.5f);
        anim.SetFloat(speedRotateID, Input.GetAxis("Horizontal")*126);

        if (anim.GetFloat(speedZID) > 3)
        {
            RaycastHit hit;
            if(Physics.Raycast(transform.position+Vector3.up*0.3f,transform.forward,out hit, 4.5f))
            {
                if (hit.collider.tag == "Obstacle")
                {
                    if(hit.distance>3)
                    anim.SetBool(vaultID, true);
                }
            }
            else anim.SetBool(vaultID, false);
        }

	}
}

5️⃣ 此时人物还可能穿墙而过,我们需要给他加上Character Controller,并设置合适的Center(高度、位置)和Radius(半径)等

动画展示:

大家还有什么问题,欢迎在下方留言!


 

在这里插入图片描述


如果你有 技术的问题  项目开发

都可以加下方联系方式

和我聊一聊你的故事🧡

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值