微信扫一扫 分享朋友圈

已有 1121 人浏览分享

开启左侧

转载:Unity 实现人物移动

[复制链接]
1121 0

首先创建一个专门控制移动的脚本(角色,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+CurrentInputspeedTime .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"))); } }

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

10

主题
精彩推荐
热门资讯
网友晒图
图文推荐
  • iOS App

  • 安卓App

Archiver|手机版|小黑屋|技你太美101

GMT+8, 2024-11-23 19:35 , Processed in 0.107640 second(s), 32 queries .

Powered by 技你太美101

© 2024 JNTM101 Team