Preparación de recursos
Los recursos de texturas en Internet están relativamente dispersos. Aquí hay un sitio web con texturas del sistema solar. Las imágenes son bastante hermosas: https://www.solarsystemscope.com/textures/
1. Guarde los recursos correspondientes e impórtelos al material:
La pregunta es porque mi ingles no es bueno 0.0 (estará bien si no hay impacto en la práctica)
2. Preste especial atención al importar el material solar. Para ser más realista, le configuré el atributo de autoiluminación . Hay dos métodos para lograr la autoiluminación.
El primero: https://blog.csdn.net/qq_44148565/article/details/123117751 Pero el color de la luz debe ajustarlo usted mismo. Después de probarlo, descubrí que no era natural, así que no lo hice. úsalo.
Segundo tipo: simplemente cambie el atributo Shader del material solar a Legacy Shaders/Self-Illumin/Diffuse y el tono será más natural.
La siguiente imagen muestra la comparación del antes y el después:
Pero también quería lograr el efecto de iluminar claramente los otros planetas, así que agregué otro punto de luz al objeto del juego sol:
El efecto sigue siendo muy obvio:
3. El siguiente paso es crear la esfera correspondiente y ajustar su posición, tamaño, etc. Configuré la posición inicial para que esté en una línea para simplificar el ajuste de los parámetros de posición.
secuencias de comandos
Para los planetas, es necesario realizar el ajuste de revolución, rotación y plano normal de revolución:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rotate : MonoBehaviour
{
public GameObject target; //天体旋转的中心
public float gspeed; //公转速度
public float zspeed; //自转速度
public float ry,rz; //通过y轴和z轴调整法平面
// Start is called before the first frame update
void Start(){
}
// Update is called once per frame
void Update()
{
//旋转轴
Vector3 axis = new Vector3(0,ry,rz);
//公转
this.transform.RotateAround(target.transform.position, axis, gspeed * Time.deltaTime);
//自转
this.transform.Rotate(Vector3.up * zspeed * Time.deltaTime);
}
}
Para el sol, simplemente implemente la rotación:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class sun_rotate : MonoBehaviour
{
public float speed;
// Start is called before the first frame update
void Start(){
}
// Update is called once per frame
void Update()
{
this.transform.Rotate(Vector3.up * speed * Time.deltaTime);
}
}
Monte el script Rotar en todos los planetas y luego establezca los parámetros correspondientes. Tomemos la tierra como ejemplo:
Nota: El objetivo de la luna es la tierra.
Configuración de fondo
El material de referencia también se puede encontrar en el sitio web al principio del artículo. Para tutoriales, consulte: https://segmentfault.com/a/1190000008505014
resultado de ejecución