Unity
Unity触ってみました
ヤス
公開日:2021/02/22
以前から興味のあったUnityに触ってみました。
今回はUnityで3Dの家具を配置するシミュレーターっぽいものを作ってみたので紹介したいと思います。
作成環境
Unityバージョン:2020.2.2f1
利用Aseet:Big Furniture Pack
紹介内容
今回のシミュレーターっぽいものを作成する上で重要な部分のみ紹介していきます。
1.カメラの視点変更
カメラの視点を変更して配置した家具を色んな角度から見れるようにしてみます。
下記のサイトを参考にスクリプトファイルを作成しています。
参考サイト:[Unity3D]プレイヤー中心に回転・拡縮・追従するカメラ
CameraControll.csファイルを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
using UnityEngine; [ExecuteInEditMode, DisallowMultipleComponent] public class CameraControll : MonoBehaviour { public GameObject target; public Vector3 offset; [SerializeField] private float distance = 4.0f; // 距離 [SerializeField] private float polarAngle = 45.0f; // y軸角度 [SerializeField] private float azimuthalAngle = 45.0f; // x軸角度 [SerializeField] private float minDistance = 1.0f; [SerializeField] private float maxDistance = 10.0f; [SerializeField] private float minPolarAngle = 5.0f; [SerializeField] private float maxPolarAngle = 75.0f; [SerializeField] private float mouseXSensitivity = 5.0f; [SerializeField] private float mouseYSensitivity = 5.0f; [SerializeField] private float scrollSensitivity = 5.0f; void LateUpdate() { //右クリックで視点変更 if (Input.GetMouseButton(1)) { updateAngle(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")); } updateDistance(Input.GetAxis("Mouse ScrollWheel")); var lookAtPos = target.transform.position + offset; updatePosition(lookAtPos); transform.LookAt(lookAtPos); } void updateAngle(float x, float y) { x = azimuthalAngle - x * mouseXSensitivity; azimuthalAngle = Mathf.Repeat(x, 360); y = polarAngle + y * mouseYSensitivity; polarAngle = Mathf.Clamp(y, minPolarAngle, maxPolarAngle); } void updateDistance(float scroll) { scroll = distance - scroll * scrollSensitivity; distance = Mathf.Clamp(scroll, minDistance, maxDistance); } void updatePosition(Vector3 lookAtPos) { var da = azimuthalAngle * Mathf.Deg2Rad; var dp = polarAngle * Mathf.Deg2Rad; transform.position = new Vector3( lookAtPos.x + distance * Mathf.Sin(dp) * Mathf.Cos(da), lookAtPos.y + distance * Mathf.Cos(dp), lookAtPos.z + distance * Mathf.Sin(dp) * Mathf.Sin(da)); } } |
作成したファイルをカメラのScriptに設定することで、視点が変更できるようになります。
2.3Dオブジェクトの移動
配置した家具を動かせるようにしてシミュレーターっぽくしてみます。
参考サイト:Unity 3D tutorial : Drag Gameobject with mouse
MouseDrag.csファイルを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseDrag : MonoBehaviour { private Vector3 mOffset; private float mZCoord; void OnMouseDown() { mZCoord = Camera.main.WorldToScreenPoint( gameObject.transform.position).z; mOffset = gameObject.transform.position - GetMouseAsWorldPoint(); } private Vector3 GetMouseAsWorldPoint() { // Pixel coordinates of mouse (x,y) Vector3 mousePoint = Input.mousePosition; // z coordinate of game object on screen mousePoint.z = mZCoord; // Convert it to world points return Camera.main.ScreenToWorldPoint(mousePoint); } void OnMouseDrag() { transform.position = GetMouseAsWorldPoint() + mOffset; } } |
作成したファイルを配置した家具のScriptに設定することで、動かせるようになります。
(家具には別途、rigidbody と collider を設定しておく必要があります。)
最後に
上記のScriptを作成することでシミュレーターっぽいものができました。
後は家具を選べたり、床や壁を変更できるようにすればより完成度が高くなると思います。