欢迎来到淼淼之森的个人小站。  交流请加我微信好友: studyjava。  也欢迎关注同名公众号:Java学习之道

unity之3D场景人物呈圆形均匀排列

  |   0 评论   |   0 浏览

前言

最近开始接触3D游戏,现在有个3D场景需求是这样的:需要让8个玩家围城一个圈,均匀站列,看向圆心,如下图:
在这里插入图片描述

初步尝试

在Hierarchy面板创建一个父节点,用于承载生成的8个玩家,在Scene场景中,拖动并旋转每个玩家,使其尽可能呈相同间隔展示出来。运行发现,肉眼的偏差显而可见。因此,还是借助公示计算更加方便可靠。
在这里插入图片描述

再次尝试

首先使用角度计算公式,计算出每个玩家的角度间隔值:

//算出物体间隔角度
float angle = i * Mathf.PI * 2 / numberOfObjects;

使用Instantiate实例化出8个玩家的模型:

//实例化生成物体
Instantiate(prefab, pos, Quaternion.identity);

在Game模式下可以看到界面的显示如下图:每个玩家间隔相同角,呈圆形显示。
在这里插入图片描述
完整代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CircleShape : MonoBehaviour {

    public GameObject prefab;//预制体
    public int numberOfObjects = 8; //物体总数
    public float radius = 5f; //圆圈半径

    void Start()
    {
        for (int i = 0; i < numberOfObjects; i++)
        {
            //算出物体间隔角度
            float angle = i * Mathf.PI * 2 / numberOfObjects;
            //利用三角函数求位置
            Vector3 pos = new Vector3(Mathf.Cos(angle), 0, Mathf.Sin(angle)) * radius;
            //实例化生成物体
            Instantiate(prefab, pos, Quaternion.identity);
        }
    }
}

最终尝试

使用Unity自带的3D模型时,看上去完美,无可挑剔。当换上真正的游戏模型时,是这样的。
在这里插入图片描述
因为人物模型有正面背面的区别,会导致朝向不是朝着圆心的,因此我们需要改变玩家模型朝向:

设置旋转角度

go.transform.localEulerAngles = new Vector3(0,(i-1)*(360/numberOfObjects),0);

在这里插入图片描述
完整代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CircleShape : MonoBehaviour {

    public GameObject prefab;//预制体
    public int numberOfObjects = 8; //物体总数
    public float radius = -1.2f; //圆圈半径

    void Start()
    {
        for (int i = 0; i < numberOfObjects; i++)
        {
            //算出物体间隔角度
            float angle = i * Mathf.PI * 2 / numberOfObjects;
            //利用三角函数求位置
            Vector3 pos = new Vector3(Mathf.Cos(angle), 0, Mathf.Sin(angle)) * radius;
            //实例化生成物体
            GameObject go = Instantiate(prefab, pos, Quaternion.identity);
            go.transform.localEulerAngles = new Vector3(0,(i-1)*(360/numberOfObjects),0);
        }
    }
}

项目路径:https://gitee.com/shirln/circle-shape


标题:unity之3D场景人物呈圆形均匀排列
作者:shirlnGame
地址:https://www.mmzsblog.cn/articles/2022/06/23/1655973668885.html

如未加特殊说明,文章均为原创,转载必须注明出处。均采用CC BY-SA 4.0 协议

本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。若本站转载文章遗漏了原文链接,请及时告知,我们将做删除处理!文章观点不代表本网站立场,如需处理请联系首页客服。
• 网站转载须在文章起始位置标注作者及原文连接,否则保留追究法律责任的权利。
• 公众号转载请联系网站首页的微信号申请白名单!

个人微信公众号 ↓↓↓                 

微信搜一搜爱上游戏开发