前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Unity动画☀️6. 翻越障碍物、Vector3.up、射线Physics.Raycast()、Character Controller

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

作者头像
星河造梦坊官方
发布于 2024-08-14 08:10:14
发布于 2024-08-14 08:10:14
16400
代码可运行
举报
运行总次数:0
代码可运行

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

2️⃣ 控制思路:

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

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

3️⃣ 关键代码释义:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bool Physics.Raycast(Vector3 origin,Vector3 direction,out RaycastHit hitInfo,float maxDistance)

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

4️⃣ 代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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(半径)等

动画展示:

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Unity动画☀️8. 添加角色控制器、Curves、添加滑动
添加角色控制器Character Controller后,人物不会因动画问题而导致Y轴变化,人物会始终位于水平地面上
星河造梦坊官方
2024/08/14
1280
Unity动画☀️8. 添加角色控制器、Curves、添加滑动
Unity动画☀️9. 木头自转、扛起木头、OnTriggerEnter
1️⃣ 导入木头Log,找回丢失的贴图,通过Perfab的Model—Scale Factor调节导入比例—0.3
星河造梦坊官方
2024/08/14
1260
Unity动画☀️9. 木头自转、扛起木头、OnTriggerEnter
Unity动画☀️11. IK动画—手与木头的匹配
MatchTarget实现从一段时间区域内,一个点到另一个点匹配的过程;IK动画用于直接将手或脚与某点的匹配
星河造梦坊官方
2024/08/14
2230
Unity动画☀️11. IK动画—手与木头的匹配
Unity动画☀️7. 通过MatchTarget匹配跳墙动画、Vector3、获取动画层GetCurrentAnimatorStateInfo(a).IsName(b)
b、Animator.GetCurrentAnimatorStateInfo(a).IsName("b")
星河造梦坊官方
2024/08/14
1210
Unity动画☀️7. 通过MatchTarget匹配跳墙动画、Vector3、获取动画层GetCurrentAnimatorStateInfo(a).IsName(b)
【Unity3D】鼠标射线点击,UI出现在鼠标点击的位置
创建一条射线Ray需要指明射线的起点(origin)和射线的方向(direction)。这两个参数也是Ray的成员变量。注意,射线的方向在设置时如果未单位化,Unity 3D会自动进行单位归一化处理。射线Ray的构造函数为 :
恬静的小魔龙
2020/03/10
5.3K0
Unity 基础 - 射线
Unity 中虚拟射线能够检测所碰撞到物体,使用 Physics 类的 Raycast 方法实现色心啊碰撞检测功能。
hrscy
2018/08/30
1.2K0
控制人物移动篇
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bering
2019/12/03
1.2K0
unity3d:动画animator,AvatarMask,边走边攻击,单独设置run动画速度
分为3layer,run-idel层(layer0),攻击时上半身层(layer1),原地攻击层(layer2),其中layer1,layer2里面完全复制的动画状态机
立羽
2023/08/24
3560
unity3d:动画animator,AvatarMask,边走边攻击,单独设置run动画速度
Unity-BattleStar丨8. 物理引擎Rigidbody组件、Collider组件、Raycast
游戏中物理引擎用于模拟真实世界物理环境效果,要实现游戏对象的物理行为,Rigidbody(刚体)组件是必不可少的,当挂载该组件之后,物体立刻受到重力等物理效果影响。如果对象身上还挂载着Collider(碰撞)组件,那么该对象还受到碰撞物理效果影响,例如游戏中的被车撞飞
星河造梦坊官方
2024/08/14
2150
Unity-BattleStar丨8. 物理引擎Rigidbody组件、Collider组件、Raycast
unity中射线碰撞检测总结
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bering
2019/12/03
2.1K0
Unity基础(14)-事件系统
1.Awake:用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如GameObject.FindWithTag()这样的函数搜索它们。每个游戏物体上的Awake以随机的顺序被调用。因此,你应该用Awake来设置脚本间的引用,并用Start来传递信息Awake总是在Start之前被调用。它不能用来执行协同程序。
孙寅
2020/06/02
1.7K0
Unity动画☀️3. Blend Tree下角色左右转向 &amp; Computer Positions
1️⃣ a、将Blend Tree的Blend Type设置为2D Freeform Directional,下方的两个参数代表:我们将通过控制这两个参数,来控制角色两个方向的运动
星河造梦坊官方
2024/08/14
1550
Unity动画☀️3. Blend Tree下角色左右转向 &amp; Computer Positions
Unity动画☀️一、通过 StringToHash ,控制Animator
并对他身上的Animator进行配置,方便我们使用代码,控制Animator,从而控制这个人物做出各种动作。
星河造梦坊官方
2024/08/14
2800
Unity动画☀️一、通过 StringToHash ,控制Animator
Unity-BattleStar丨11. 且听风吟:音乐与音效
Assets新建Resources文件夹,将音乐放入其中,代码使用Resources.Load方法,动态更换Audio Clip
星河造梦坊官方
2024/08/14
1080
Unity-BattleStar丨11. 且听风吟:音乐与音效
官方案例--Survival Shoot(一)
导入Survival Shooter.unitypackage,里面有个完整了,新版本导入的时候,需要简单的修改一下代码;
酱紫安
2021/11/30
4750
官方案例--Survival Shoot(一)
Unity Rigidbody实现爬坡功能
实现人物爬坡功能前,通过获取用户Horizontal和Vertical轴输入形成了一个移动方向Move Direction,该方向平行于地面,驱动Rigidbody沿该方向移动,代码如下:
CoderZ
2022/12/26
1.1K0
Unity Rigidbody实现爬坡功能
Unity3D+VR的实现
1、创建VRCamera: 使用Dive插件,从DiveUnityDemo提取摄像机和有关的脚本并export出来。
py3study
2020/01/14
6390
Unity动画☀️2.角色左右转向、Blend Tree混合树、批量注释
因为这三个动画对旋转、Y轴无影响,只对Z方向有影响,所以在Blend Tree的Blend Type选择1D。
星河造梦坊官方
2024/08/14
5760
Unity动画☀️2.角色左右转向、Blend Tree混合树、批量注释
Unity LineRenderer 射线检测 激光攻击
在进行激光攻击的脚本编写前,我们先进行一定程度的想象,思考激光和普通的远程攻击有哪些不太一样的地方。
汐夜koshio
2020/03/19
2.1K1
Unity基础(22)-Navigation导航系统
同时设置为不阻碍行走-Walkable ,即可以在障碍物上行走。
孙寅
2020/06/02
1.3K0
Unity基础(22)-Navigation导航系统
推荐阅读
相关推荐
Unity动画☀️8. 添加角色控制器、Curves、添加滑动
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档