角色移动控制

用Character Controller替代Rigidbody?Unity角色移动方案深度对比 本文深度对比了Unity中Character Controller与Rigidbody两大角色移动方案的技术特性与适用场景。通过核心机制解析、性能测试数据和实战调优指南,帮助开发者根据项目需求选择最佳方案,特别推荐Character Controller组件在需要精确控制的游戏类型中的优势应用。 阅读详情

简单的角色移动,使用CharacterController控制器,参加如下代码

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	public float speed = 6.0F;
	public float jumpSpeed = 8.0F;
	public float gravity = 20.0F;
	private Vector3 moveDirection = Vector3.zero;
	void Update() {
		CharacterController controller = GetComponent<CharacterController>();
		if (controller.isGrounded) {
			moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
			moveDirection = transform.TransformDirection(moveDirection);
			moveDirection *= speed;
			if (Input.GetButton("Jump"))
				moveDirection.y = jumpSpeed;

		}
		moveDirection.y -= gravity * Time.deltaTime;
		controller.Move(moveDirection * Time.deltaTime);
	}
}// This script moves the character controller forward 
// and sideways based on the arrow keys.
//这个脚本用箭头键向前移动和侧移角色控制器。
// It also jumps when pressing space.
//当按下空格键时,它跳起。
// Make sure to attach a character controller to the same game object.
//确保把一个character controller组件附加到同一个游戏物体上。
//It is recommended that you make only one call to Move or SimpleMove per frame.
//建议你每帧只调用一次Move或者SimpleMove。 

var speed : float = 6.0;
var jumpSpeed : float = 8.0;
var gravity : float = 20.0;

private var moveDirection : Vector3 = Vector3.zero;

function Update() {
   var controller : CharacterController = GetComponent(CharacterController);
   if (controller.isGrounded) {
	 // We are grounded, so recalculate
	 // move direction directly from axes
	 //我们着地了,所以直接通过轴重新计算move direction。
	 moveDirection = Vector3(Input.GetAxis("Horizontal"), 0,Input.GetAxis("Vertical"));
	 moveDirection = transform.TransformDirection(moveDirection);
	 moveDirection *= speed;     

     if (Input.GetButton ("Jump")) {
			moveDirection.y = jumpSpeed;
		}
   }
   // Apply gravity
   //应用重力。
   moveDirection.y -= gravity * Time.deltaTime; 
   // Move the controller
   //移动控制器。
   controller.Move(moveDirection * Time.deltaTime);
}


【注意】

1、如果想让角色控制器推开其他刚体或者对象,你可以在对象附加的脚本中添加OnControllerColliderHit()函数,这样对它们施加力就能够产生碰撞。

2、另外,如果你想让你的游戏角色被物理效果影响,那就最好使用刚体而不是角色控制器。

3、如果发现你的角色频繁被卡住,尝试调整SkinWidth值,实践中比较好的值是至少要大于0.01并且大于Radius的10%。

4、transform.TransformDirection();获取此对象的世界坐标方向,使它朝着自身的某一方向移动// and sideways based on thearrow keys.



用鼠标控制角色移动 第一次写博客,希望大家多多指教!作为一名热爱国产RPG游戏的热血少年,什么仙剑奇侠传,古剑奇谭,轩辕剑等等国产大作通通一览无余,已经伴随我的童年成长到现在。前段时间仙剑新出的6系列再次让我的情感生活和世界观得到了升华,这又让我对游戏开发产生了更大的兴趣和决心。其实这一切的根源追溯到一年前罗大神发布的仙剑同人游戏心愿,体验了这部游戏之后,我对他产生了无限的敬仰,从此踏上了游戏研发之路。玩游戏不如做游 阅读详情

相关推荐

【Unity&角色移动】代码控制重力

移动代码如下所示 using UnityEngine; using System.Collections; public class PersonMoveControl : MonoBehaviour { public KeyCode mKeyLeft = KeyCode.LeftArrow; public KeyCode mKeyRight = KeyCod

BuladeMian的博客,菜得抠脚,菜得真实 1万+

controller.Move 方法

今天遇到的这段代码很有意思,是通过给物体添加physics——charactercontroller,然后再用character.Move方法来控制物体移动,所以自带一些复杂的效果(就像实现人物character一样),例如跳跃时候和爬坡时候,完全是和人物的行为一样,贴一下官方文档: CharacterController.Move public CollisionFlags Move(Vecto...

awe_some_zt的博客 1216

Unity3D鼠标控制角色移动

控制角色移动,对于PC端而言就是键盘或者鼠标。其中键盘控制角色移动的是经典的fps游戏中wasd四个方向按键。而鼠标控制角色移动一般常见于MMORPG。我比较倾向于MMORPG风格控制角色移动,所以选择这一类。 Unity3D官方提供的是javascript写的一个基于键盘控制的小demo。对我而言,javascript虽然目前很火,但是还是觉得这门语言缺陷太严重,所以改用C#,期间碰到了一个很奇怪的问题:其中一个函

gscienty的专栏 3955

角色控制器 CharacterController.Move

角色控制器没有碰撞效果和刚体最明显的区别   属性面板参数: Slope Limit:爬坡限制 Step Offset:台阶高度 Skin Width :皮肤厚度 皮肤厚度决定了两个碰撞器可以互相渗入的深度。较大的皮肤厚值度会导致颤抖。小的皮肤厚度值会导致角色被卡住。一个合理的设定是使该值等于半径(Radius)的10%。 Min Move Distance:最小移动距离 如果角色移动的...

清风ai明月的专栏 6614

【unity】角色移动控制,移动,跳跃,地面监测

角色移动控制,移动,跳跃,地面监测

7zwang的博客 1万+

unity 角色控制器,控制人物移动

  //获得键盘按键虚拟轴        HeroMove.z = Input.GetAxis("Vertical") * Speed * Time.deltaTime;        HeroMove.x = Input.GetAxis("Horizontal") * Speed * Time.deltaTime;       //gyro为挂有陀螺仪脚本的对象,在这里只取他的Y轴,控制角色  ...

qq_38262464的博客 6886

第三十章 Unity角色控制器 Character Controller

unity角色控制器 Character Controller介绍,Move方法和SimpleMove方法使用

konkon2012的博客 7323

C++可视化角色按键移动控制

1

weixin_43362751的博客 8108

CharacterController.Move 实现角色移动

CharacterController.Move 实现角色移动 34 2016-9-22 09:09 |个人分类:Unity3d| 角色移动 using UnityEngine; using System; using System.Collections; [RequireComponent(typeof(CharacterController))] public c

绀目澄清 6935

键盘控制角色移动

using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerControler : MonoBehaviour { public float MoveSpeed; Animation animation; bool IsRun,IsWalk; void Start...

m0_46612856的博客 652

控制角色的移动及转向

控制角色的移动及转向 控制角色移动方法有多种,下面以键盘控制实例代码如下 require 'redcarpet' markdown = Redcarpet.new("Hello World!") puts markdown.to_html float h=Input.GetAxis("Horizontal"); float v=Input.GetAxis("Vertical"); if(...

fanxin1395的博客 938

Unity3d 角色移动控制的几种方法

角色移动控制(一)角色控制器(二)Translate控制(三)velocity移动(四)Vector3.Lerp (一)角色控制器 首先要使用CharacterController组件,在物理里面,属性面板里面可以调它们的数据大小,然后就是写脚本。 创建move脚本,首先在Start()里面获得这些组件 void Start() { car = GetComponent<CharacterController>();//获得角色控制器组件 play

qq_46060398的博客 1万+

C语言+EasyX编写键盘控制角色移动

今天用C语言+EasyX写一个键盘控制角色移动的项目 原理其实和前面写的贴图的打字母游戏差不多 #include #include #include IMAGE background, boy1, boy2; int num = 0; int x0 = 0; int y0 = 450; void InitInstance() { loadimage(&background, "backgro

TYPYDEF的博客 1万+

Unity ——UGUI 通过摇杆控制角色移动

简单版:控制方块的移动。进阶版:控制人物的移动知识铺垫: 首先我们必须要知道,在Unity的UGUI中,对UI的操作有八个回调,分别需要实现八个接口。分别是:鼠标进入,鼠标离开,鼠标点下,鼠标抬起,鼠标开始拖拽,鼠标拖拽中,拖拽结束如下所示:我们可以先对这几个接口方法进行一下测试:  测试结束后,大家就会对这些接口方法有一些初步的了解。using UnityEngine; using UnityE...

Htlas的博客 2万+

Cocos Creator 使用摇杆控制角色移动

原理 玩家操作摇杆的方向键,摇杆会根据玩家移动的位置,计算出将要运动的方向的向量并输出给角色, 角色在接收到输入的运动方向的向量后,将其与自身的速度进行计算,最后得出要移动位置。 实现摇杆组件 处理UI。 将摇杆的素材拖动到层级管理器中,并命名为Joystick, 效果如下: 添加脚本。 新建脚本并命名为:Joystick.ts,并将此脚本挂载到场景中的Joystick节点上。 实现摇杆中圆球移动。 这里默认圆球的初始位置为:(0, 0)。 onEnable() { t

niccgz 3474

基于任务的后勤智能体:三段构建与演进设计探究

这是系统智能化的核心难点。例如,对于一个“加强连级滩头阵地防御”子任务,系统会根据防御时长、预期敌军攻击强度、地形等因素,计算出所需的弹药(不同弹种的具体数量)、构筑工事的器材、人员的给养和饮水量、以及医疗救护的药品和血包数量。首先进行分词、词性标注等基础处理,然后利用在军事语料库上训练的命名实体识别(NER)模型,提取出关键实体,如任务类型(“夺控作战”)、作战对象(“Y岛”)、时间约束(“D日H时”、“24小时内”)、成功标准(“建立稳固滩头阵地”)、保障重点(“弹药充足”、“及时救治”)等。

weixin_49042442的博客 1088

unity中使用手柄控制角色移动

unity中第三人称下使用手柄控制角色移动 本文建议结合这一篇文章观看: https://blog.csdn.net/qq_45919090/article/details/109393562 unity2017及以上的版本在插入手柄时unity会自动识别手柄,其默认的输入方式及按键配置可以在Edit–>Project Settings–>Input中的Inspector面板中找到并可进行自定义修改,为了与键盘及鼠标的输入方式区分,我们做如下设置: 左摇杆: 右摇杆: 十字键: LT和

D_Miles 8449

视频倍速 - 在线调倍速的加速器APP工具

一刀工具箱APP提供一键可将手机上的视频倍速播放,可以调整视频倍速的加速器,调节视频的速度也就是调节视频的播放速度!一键可将手机上的视频倍速播放,可以调整视频倍速的加速器,调节视频的速度也就是调节视频的播放速度!视频倍速-在线调倍速的加速器-一刀工具箱APP。...

无涯教程 7553

Unity控制角色移动的两种方法

Unity控制角色移动常用两种方法: 一、在update函数中用transform.Translate()。 代码示例: using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerContral : MonoBehaviour { private float player_speed = 3.0f; //角色移动速度 public float horiz

qq_43113495的博客 5685

【SLAM论文笔记】SplaTAM论文小结

参考方法有ORB-SLAM3、Point-SLAM、NICE-SLAM、Kintinuous、ElasticFusion,测试数据集有ScanNet++、Replica、TUM-RGBD、Orig-ScanNet,SpaTAM并未在全部对比均为第一,表现最佳的是在ScanNet++、Replica,ScanNet++上SplaTAM方法位姿精度比第2名ORB-SLAM3高两个数量级,在TUM。上无稀疏SLAM结果,NICE-SLAM与Point-SLAM占优。SplaTAM基本做到了SOTA。

持之以恒 1008

AI 大模型在电商精准营销中的应用

例如,对于用户 A 和用户 B,通过比较他们对共同评价过的商品的评分差异来确定相似度。其中,(Gain(D,a))表示特征(a)对数据集(D)的信息增益,(Ent(D))表示数据集(D)的信息熵,(V)表示特征(a)的取值个数,(D^{v})表示特征(a)取值为(v)的样本子集。其中,(sim(A,B))表示用户 A 和用户 B 的相似度,(I)表示用户 A 和用户 B 共同评价过的商品集合,(R_{A,i})和(R_{B,i})分别表示用户 A 和用户 B 对商品(i)的评分。(三)营销活动效果预测。

alittlehippo的博客 1627

Unity3D - 控制角色移动

1.添加刚体 设置 Drag 和Angilar Drag为Infinity 2.代码控制 1.获取组件 2.获取水平轴和垂直轴的值 3.移动函数 4.控制动画播放using UnityEngine; using System.Collections;public class PlayerMove : MonoBehaviour { public float speed = 5f;

TravelerTD_剑,酒与行者 2669

华为OD机试2025C卷-双十一最大花费金额[100分](Java_Python3_C++_C语言_JsNode_Go)实现100%通过率

双十一最大花费金额 - 动态规划解法 摘要:本文介绍了华为OD机试中"双十一最大花费金额"问题的动态规划解法。该问题要求在给定N件商品价格和优惠券面额X的情况下,选择若干商品使总花费不超过X且尽可能大。核心解法采用布尔型动态规划数组,记录每个金额是否可被拼出。算法时间复杂度为O(N*X),空间复杂度为O(X)。通过倒序遍历避免重复选择同一商品,最后从X向下查找第一个可达金额作为答案。文中提供了C++和Java的实现代码,并解释了与经典0-1背包问题的关系。 关键点: 问题本质是0-1背包/子集和问题的变体

2503_91057718的博客 46
上一篇: 音乐控制
下一篇: 加载场景
LCGG
博客等级 码龄14年 21粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值