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

简介: unity实实现3D场景人物呈圆形均匀排列

前言

最近开始接触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实战之弹幕功能
使用unity也可以实现追剧弹幕效果
|
5月前
|
C# 图形学
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
56 0
|
5月前
|
vr&ar C# 图形学
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
43 0
|
5月前
|
vr&ar 图形学
【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)
【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)
61 0
|
5月前
|
图形学
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
187 0
|
5月前
|
C# 图形学
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
194 1
|
5月前
|
数据可视化 C# 图形学
【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)
【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)
76 0
|
9月前
|
图形学
【Unity实战系列】如何把你的二次元老婆/老公导入Unity进行二创并且进行二次元渲染?(附模型网站分享)
【Unity实战系列】如何把你的二次元老婆/老公导入Unity进行二创并且进行二次元渲染?(附模型网站分享)
371 0
|
9月前
|
持续交付 图形学 开发者
【Unity实战系列】Unity的下载安装以及汉化教程
【Unity实战系列】Unity的下载安装以及汉化教程
217 0
|
图形学 开发者
unity实战之lol技能释放范围
unity实现ol技能释范围放判定
unity实战之lol技能释放范围