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 一个向下的力 怎么写? 瞬间的力 和 恒定力 都有最好呵呵的主要内容,如果未能解决你的问题,请参考以下文章