制作过程

在场景中新建一个球体(Planet)和一个胶囊(Player),适当缩放并添加材质,这里胶囊会被视为玩家

然后将摄像机设为胶囊(Player)的子物体



自行调整合适的摄像机视角

新建脚本GravityArrtacter,添加到Planet上

public class GravityAttracter : MonoBehaviour
{
public float gravity = -10; //重力大小
public void Attract(GameObject obj) //吸引物体的方法,传入需要吸引的物体
{
Transform body = obj.GetComponent<Transform>();
Vector3 gravityUp = (body.position - transform.position).normalized; //星球到玩家的向量
Vector3 bodyUp = body.up; //被吸引物体的正上方向 body.GetComponent<Rigidbody>().AddForce(gravityUp * gravity);//吸引物体,重力大小为负数,方向变为物体到星球方向 //让一个轴从参数一的方向旋转到参数二(世界空间)的方向,这里是让物体上方旋转到重力方向,
//但是一个轴无法决定物体的旋转状态,* body.rotation得到物体需要旋转的目标方向
Quaternion targetRotation = Quaternion.FromToRotation(bodyUp, gravityUp) * body.rotation;
//进行插值,旋转
body.rotation = Quaternion.Slerp(body.rotation, targetRotation, 50 * Time.deltaTime);
}
}

自己设置重力大小,这里负数表示重力方向

新建脚本Body,添加到Player上

public class Body : MonoBehaviour
{
public FauxGravityAttracter attracter; //声明星球重力
private Rigidbody myRigidbody; void Start()
{
myRigidbody = gameObject.GetComponent<Rigidbody>(); //获取物体刚体
myRigidbody.constraints = RigidbodyConstraints.FreezeRotation;//取消刚体碰撞旋转影响
myRigidbody.useGravity = false; //取消世界空间重力影响
} void Update()
{
attracter.Attract(gameObject);//传入参数,该物体被吸引
}
}

设置对应参数

新建PlayerController,添加到Player上

public class PlayerController : MonoBehaviour
{
public float moveSpeed = 15f;
private Vector3 moveDir;
private Rigidbody myRigidbody; void Start()
{
myRigidbody = gameObject.GetComponent<Rigidbody>();
}
private void FixedUpdate()
{
myRigidbody.MovePosition(myRigidbody.position + transform.TransformDirection(moveDir) * moveSpeed * Time.deltaTime);
} void Update()
{
moveDir = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")).normalized;
}
}

设置移动速度

这样就模拟出在星球表面行走

最新文章

  1. Stack类
  2. Maven——使用Maven构建多模块项目
  3. 关于h5手机端上拉加载和下拉刷新效果-1
  4. 对CAB文件进行数字签名
  5. Manacher算法求回文半径
  6. fastUtils学习
  7. Oracle 锁模式
  8. SQL中的cast()函数
  9. java核心技术面试整理
  10. macbook air扩展显示器全屏滑动怎样不一起滑动?
  11. asp.net core系列 25 EF模型配置(隐藏属性)
  12. Zabbix配置邮件监控
  13. Nginx系列7:SSL证书的公信力是如何保证的?
  14. [k8s]k8s内容索引
  15. Unity3D_UGUI判断鼠标或者手指是否点击在UI上
  16. Ubuntu下sublime-text3安装步骤
  17. Linux程序的执行
  18. Node.js实战(二)之HelloWorld示例
  19. C#基础:在using中创建对象
  20. Kafka设计解析(十四)Kafka producer介绍

热门文章

  1. C++设计模式 - 命令模式(Command)
  2. 有限差分法(Finite Difference Method)解方程:边界和内部结点的控制方程
  3. Linux下使用压力测试工具stress
  4. 使用 rabbitmq 的场景?
  5. 运筹学之&quot;连通图&quot;和&quot;最小枝杈树&quot;和&quot;最短路线问题&quot;
  6. Tomcat安装流程(无图简易)
  7. jsp页面学习之&quot;javascript:void(0)&quot;的使用
  8. DevEco Device Tool 3.0 Release 新版本发布,支持多人共享开发
  9. CSS: 给表格的第一列和最后一列不同的样式
  10. D3.js中国地图下钻