unity初学_3
前言
提示:这里可以添加本文要记录的大概内容: assets的gitee位置:链接: 太阳系assets 代码仓库:gitee 祭师与恶魔assets 本次博客包含两个**“简单太阳系”和“祭师与恶魔”**两个代码实验 简单太阳系预设了四个星球和一个太阳,本文只展示代码和演示
祭师与恶魔游戏: 列出游戏提及的事物 列出玩家动作表 对游戏中的对象进行预设 主要脚本代码 实验演示
提示:以下是本篇文章正文内容,下面案例可供参考
一、简答
游戏对象运动的本质是什么?
对象运动的本质其实是对象每一帧的空间变化和自身变化,包括了transform属性中的“相对位置(position)”和“旋转角度(rotation)”两个方面的变化。
请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…)
定义一个vector3变量,用他的属性表示每个时刻的水平速度和垂直速度,水平速度保持不变,垂直速度随时间正比例变化
直接计算出每个时间对象的位置: 例如:z为一个常数,y为x的二次函数,x随时间均匀变化
二、简单太阳系
编辑器截图: 运行截图:
具体描述,只设置了一个太阳,四颗大小不一样的星球,运行时将背景设置为符合星空的黑色,每个星球的公转角速度不同,本次编程使用了find函数以便代码简明,在后续的祭师与恶魔中并没有使用find,也没有使用SendMessage等突破程序结构的语句 太阳系的代码实现:公转脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class gongzhuan : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
GameObject.Find("shuixing").transform.RotateAround(Vector3.zero, new Vector3(0.1f, 1, 0), 60 * Time.deltaTime);
GameObject.Find("diqiu").transform.RotateAround(Vector3.zero, new Vector3(0.1f, 1, 0), 50 * Time.deltaTime);
GameObject.Find("muxing").transform.RotateAround(Vector3.zero, new Vector3(0.1f, 1, 0), 80 * Time.deltaTime);
GameObject.Find("haiwangxing").transform.RotateAround(Vector3.zero, new Vector3(0.1f, 1, 0), 30 * Time.deltaTime);
}
}
assets的gitee位置:链接: 太阳系assets
三、祭师与恶魔
游戏提及的事物
三个祭师,三个恶魔,河流,左岸,右岸,船
玩家动作表
动作 | 触发条件 | 操纵对象 |
---|
祭师上船 | 点击岸上的祭师 | 祭师 | 祭师下船 | 点击船上的祭师 | 祭师 | 恶魔上船 | 点击岸上的恶魔 | 恶魔 | 恶魔下船 | 点击船上的恶魔 | 恶魔 | 行驶船 | 点击船 | 船 |
代码片段说明:
用户界面设计UserGUI:重置所有对象按钮,游戏规则提示,胜利失败提示:
public class UserGUI : MonoBehaviour, IUserAction {
private int state;
public UserGUI(){
state = -1;
}
public void setLose(){
state = 0;
}
public void setWin(){
state = 1;
}
public void display(){
OnGUI();
}
void OnGUI(){
GUIStyle style = new GUIStyle{
fontSize = 45,
};
GUIStyle style1 = new GUIStyle
{
fontSize = 20,
};
style.normal.textColor = new Color(200 / 255f, 200 / 255f, 150 / 255f);
GUI.Label(new Rect(UnityEngine.Screen.width/4, UnityEngine.Screen.height/10, 180, 70), "绿色代表天使,红色代表恶魔", style1);
if (GUI.Button(new Rect(UnityEngine.Screen.width / 10, UnityEngine.Screen.height / 10, 100, 50), "重置所有对象")){
Director.GetInstance().scene.Reset();
}
if (state == 0){
style.normal.textColor = new Color(255 / 255f, 0 / 255f, 0 / 255f);
GUI.Label(new Rect(UnityEngine.Screen.width / 3, UnityEngine.Screen.height/1.3f, 180, 70), "您违背了游戏规则,失败了", style);
}
if (state == 1){
style.normal.textColor = new Color(255 / 255f, 0 / 255f, 0 / 255f);
GUI.Label(new Rect(UnityEngine.Screen.width/3, UnityEngine.Screen.height / 1.3f, 180, 70), "您取得了胜利", style);
}
}
}
调节视角(可以在运行后调节相机位置,这种调节不会影响代码,调整到合适角度后记住相机的参数,然后再返回代码修改,重新运行就修改完成了)
public class Camera : MonoBehaviour
{
void Start()
{
this.transform.position = new Vector3(-8, 10, 0);
this.transform.rotation = Quaternion.Euler(new Vector3(30, 90, 0));
}
}
控制游戏对象的运动scenecontroller
public interface SceneController
{
void LoadResources();
int getObjPos(string name);
void moveObjTo(string name);
void Reset();
}
判断是否胜利,是否违规director
public class Director : System.Object {
private static Director instance_1;
public SceneController scene { get; set; }
public static Director GetInstance()
{
if (instance_1 == null){
instance_1 = new Director();
}
return instance_1;
}
}
提示:这里对文章进行总结:
代码仓库:gitee 祭师与恶魔assets
|