ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity制作一个小星球

2022-04-23 22:01:49  阅读:220  来源: 互联网

标签:body myRigidbody 星球 物体 Unity void 制作 public 重力


制作过程

在场景中新建一个球体(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;
    }
}

设置移动速度

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

标签:body,myRigidbody,星球,物体,Unity,void,制作,public,重力
来源: https://www.cnblogs.com/AlphaIcarus/p/16183741.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有