Unity 实现人物移动_unity人物移动脚本-程序员宅基地

技术标签: unity  

首先创建一个专门控制移动的脚本(角色,npc都能用),命名为Movement,但是不带Input Manager,Manager在角色/npc脚本写。

此脚本挂载物体必为刚体,故用[RequireComponent(typeof (Rigidbody))]确保物体有刚体组件。

在Awake里调用刚体组件

在FixedUpdate里运用MovePosition方法,该方法是将物体移动到指定位置,参数为物体当前位置+当前输入值(方向)×速度×时间

Ps:希望方向输入值范围不超过1,则新写一个方法,命名为SetMovementInput,运用ClampMagnitude方法使输入的三维变量input不超过1

源代码如下

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

[RequireComponent(typeof (Rigidbody))]
public class Movement : MonoBehaviour
{
    private Rigidbody rig;

    public Vector3 CurrentInput;
    public float speed;

    private void Awake()
    {
        rig = GetComponent<Rigidbody>();
    }

    private void FixedUpdate()
    {
        rig.MovePosition(rig.position+CurrentInput*speed*Time .deltaTime);//移动到目标位置,但有障碍过不去
    }

    public void SetMovementInput(Vector3 input)
    {
       CurrentInput =  Vector3.ClampMagnitude(input, 1f);
    }
}

在角色控制脚本中,首先还是在Awake中调用Movement脚本,然后使用其中的SetMovementInput方法,传入一个三维变量值,x为Horizontal,y为0,z为Vertical。

源代码如下,没有直接在Update里写是为了以后方便维护。

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

public class Character : MonoBehaviour
{
    private Movement movement;

    private void Awake()
    {
        movement = GetComponent<Movement>();
    }

    private void Update()
    {
        UpdateMovementInput();
    }

    private void UpdateMovementInput()
    {
        movement.SetMovementInput(new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")));
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_63136168/article/details/123698490

智能推荐

MMS 协议学习笔记-程序员宅基地

文章浏览阅读889次。MMS 协议学习笔记什么是MMSMMS 是 Multimedia Messaging Service (多媒体消息服务) 的缩写,中文译为“彩信”,可以用于传送文字、图片、动画、音频和视频等多媒体信息。手机终端合成多媒体消息后,可以向网内所有合法用户发送多媒体消息,由MMSC(多媒体消息中心)对消息..._oma mms

matlab中怎么给符号变量赋值_matlab中怎样给符号表达式中的变量赋值-程序员宅基地

文章浏览阅读6.4k次,点赞4次,收藏7次。https://jingyan.baidu.com/article/7082dc1cdbd69de40a89bdf8.htmlhttp://blog.sina.com.cn/s/blog_7f15852e0101g8tq.html_matlab中怎样给符号表达式中的变量赋值

VMware超详细Oracle RAC安装及搭建指南_oracle rac搭建-程序员宅基地

文章浏览阅读2.3w次,点赞29次,收藏158次。本文以VMware虚拟机作为测试环境,搭建包含两个节点的RAC集群。VMware虚拟磁盘作为共享存储盘,磁盘分配容量大小仅供参考。由于安装过程以大量截图方式进行说明,建议在PC端浏览。_oracle rac搭建

Autoware.auto on Orin_foxy 安装 osqp-程序员宅基地

文章浏览阅读125次。1.sudo apt install ros-foxy-filters ros-foxy-nav2-msgs ros-foxy-lanelet2-core ros-foxy-lanelet2-io ros-foxy-osqp-vendor ros-foxy-octomapsudo apt-get install libcgal-dev libgeographic-dev2.colcon build --packages-skip io_context off_map_obstacles_filter _foxy 安装 osqp

MySql:创建存储过程,批量往表中插入数据_mysql 批量插入数据 存储过程-程序员宅基地

文章浏览阅读626次。Mysql创建存储过程,批量往表中插入数据_mysql 批量插入数据 存储过程

Android逆向反编译之工具介绍_android 逆向工具 smali-程序员宅基地

文章浏览阅读5.6k次,点赞3次,收藏5次。傻瓜式操作图形化工具Smali2JavaUI smali2java是一个将smali代码反编译成java代码的工具.什么是smali?smali是将Android字节码用可阅读的字符串形式表现出来的一种语言,可以称之为Android字节码的反汇编语言.使用baksmali或apktool可以将Android应用程序包(apk或jar)反编译为smali代码.smali2java工具基于apkto_android 逆向工具 smali

随便推点

计组——彻底搞懂cache主存映射以及cache容量的计算_cache容量计算-程序员宅基地

文章浏览阅读7w次,点赞504次,收藏1.8k次。cache主存映射一、三种映射方式1. 全相联映射2. 直接映射3. 组相联映射二、cache容量计算1. 先计算cache行标记项位数2. 再计算cache块位数3. 最后计算cache总容量三、cache写策略1. 写命中:(1)全写法 Write Through(2)写回法 Write Back2. 写不命中(1)写分配法 Write Allocate(2)非写分配法 Not Write Allocate一、三种映射方式假设计算机主存大小256MB,按字节编址,数据cache有8行,行长64B。主_cache容量计算

jackson实现json数据与对象, 集合之间的转换_jackson json转集合对象-程序员宅基地

文章浏览阅读1.3k次。 前面列举了Gson和fastjson处理json格式数据的具体用法,以下介绍jackson如何简单处理json格式数据,还是延用前面文章中的实体类Product. 使用jackson需要引入以下第三方jar包: package Exercise1_jackson;import java.io.IOException;import java.ut..._jackson json转集合对象

记zookeeper 扰动导致HBase的一次不可用-程序员宅基地

文章浏览阅读729次。HBase运维过程中,最大的问题除了自己一些bug外,就是网络的延迟。这种延迟会导致hadoop的append的timeout,本来只是一个小事,但是会导致HBase因为无法append WAL log 退出。而这次遇到的却是zookeeper的问题。我们的集群里面有3台zookeeper。首先lead(A) 和其中的一台follower B(xx.xx.xx.85)连接出现异常,..._/hbase unable to list children of znode /hbase/rs

通过DYLD_INSERT_LIBRARIES实现基于动态库的hook功能-程序员宅基地

文章浏览阅读5.3k次。Wrox Press Mac OS X and iOS Internals, To the Apple’s Core (2013).pdf PAGE164也有描述:支持动态库插入(Interposing)功能,是苹果加载器dyld在传统加载器的一个不同的地方。通过向宏DYLD_INSERT_LIBRARIES里写入动态库完整路径。就可以在执行文件加载时将该动态库插入。dyld源代码摘列:_dyld_insert_libraries

http大文件传输_http 大文件传输-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏7次。随着科技的发展网络传输的资源越来越大,从几k到几M,几G。因此网络传输压力越来越大。由此http有了解决,大文件传输的方法:数据压缩传输,可以将大文件进行压缩传输通过Accept-Encoding和Content-Encoding指定压缩类型进行压缩传输。 分块传输:因为音频,视频都是经过高倍压缩,在压缩也起不到什么效果,因此有了分块传输,解决大文件传输。分块传输因名而异,就是将大文件..._http 大文件传输

页面之间传值方式的总结,五种方式,通知,block,代理,单例,NSUERDEFALUT,-程序员宅基地

文章浏览阅读78次。首先代码拿上1:单例2:通知3:代理4:block方法5:NSUSERDEFAULT(沙盒文件)先是单例类:.h文件@interface DataSource : NSObject@property (nonatomic, strong) NSString *myName;//单例的属性,用于传值+(DataSource*)sharedDat..._nsuer

推荐文章

热门文章

相关标签