unity 从世界的方向给一个 gameobject 一个向下的力 怎么写? 瞬间的力 和 恒定力 都有最好呵呵

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity 从世界的方向给一个 gameobject 一个向下的力 怎么写? 瞬间的力 和 恒定力 都有最好呵呵相关的知识,希望对你有一定的参考价值。

参考技术A 用角色控制器CharacterController
// 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);
参考技术B 加上rigidbody,然后就可以施加各种力了,具体查看api追问

rigibody 效果不太好啊 gameobject 沿着自身forward移动 碰到 另一个 cellider之后 飞起来了 然后就一直在天上飘着 我想给他一个恒定的力 让他一直有一个向下的压力 怎么写demo

追答

你想加恒定的力就是要用rigidbody。。如果不想要物理引擎支持,那你就只能自己改他的坐标,相当于自己来模拟物理。

unity 从深度纹理重建世界坐标

参考技术A

根据深度纹理获取世界坐标很常用,可以实现很多有用的功能,比如简单的雾 / 扫描线等

主要参考

https://forum.unity.com/threads/reconstructing-world-pos-from-depth-imprecision.228936/

准备工作

在 unity 中开启深度贴图
创建一个脚本用来放在 Camera 组件上

根据搜索总结了下,重建世界坐标基本有两种计算方法

第一种最简单最容易理解的就是在 shader 中对深度纹理采样,然后对深度坐标进行矩阵变换,乘以投影变换矩阵和相机变换矩阵的逆矩阵,就可以还原得到世界坐标

第一种方法原理比较简单,但是效率不是很高,毕竟是逐像素计算,

第二种方法可以使用屏幕射线差值的方法,《unity shader入门精要》中有非常详细的推导和解释

物体的世界坐标为相机的世界坐标+物体在相机坐标系的坐标
相机坐标系的坐标 = 点的方向 * 点到相机的距离
点的方向可以通过计算剪裁空间四个角的射线得到
点到相机的距离为

书中使用的是近裁平面推导,好像使用原裁平面更好推导
总结起来就是

由于是在顶点着色器计算线段的差值,所有效率会比逐像素计算要高

为了方便验证计算结果,可以在场景中简单摆放几个物体,使用简单的材质输出世界坐标作为颜色,然后在 camera 组件上添加屏幕后处理的脚本绘制世界坐标,开启 / 禁用 camera 上的后处理就可以对比计算结果

以上是关于unity 从世界的方向给一个 gameobject 一个向下的力 怎么写? 瞬间的力 和 恒定力 都有最好呵呵的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D世界坐标系 ( 左手坐标系 | 游戏物体坐标 | 世界坐标系方向 )

unity人物怎么移动

关于Unity中物体分别在本地和世界坐标系对应方向的移动

关于Unity中的世界坐标和局部坐标

Unity Shader 之 基础光照

Unity重要脚本函数