本科课程【虚拟现实引擎Unity3D】实验3 - 烘焙光影贴图与动画应用

x33g5p2x  于2022-05-16 转载在 其他  
字(2.9k)|赞(0)|评价(0)|浏览(334)

大家好,我是【1+1=王】, 热爱java的计算机(人工智能)渣硕研究生在读。
如果你也对java、人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!!
Good better best, never let it rest, until good is better, and better best.

近期会把自己本科阶段的一些课程设计、实验报告等分享出来,供大家参考,希望对大家有帮助。

博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html

一、 实验目的

  1. 掌握烘焙的基本流程与实现
  2. 掌握光影贴图的使用
  3. 掌握动画的基本应用

二、 实验内容

1. 实验任务

自己准备模型、材质、人或动物行为动画、脚本等,尝试实现场景中的烘焙光影贴图与人或动物行为动画,能通过键盘或鼠标改变人或动物行为。可根据需要增加其他内容。

2. 程序设计

1) 数据输入
(1)初始化输入

2) 数据存储(输入数据在内存中的存储)
(1)没有数据存储
(2)myAnimator存储Animator的组件,myCamera存储摄像机对象

3) 数据处理
(1)去掉场景中的Directional Light,然后添加Spot Light、Point Light、Area Light等光源,然后调节各光源的大小以及方向、位置等信息,以此达到目标效果
(2)初始化:

myAnimator = GetComponent<Animator>();                  //初始化Animator组件
        UIInit();                                               //初始化UI界面
        myCamera = GameObject.Find("Main Camera").transform;    //初始化摄像机对象
设置跟随:
        myCamera.position = transform.position + new Vector3(0, 1.5f, -5);   //摄像机对象跟随
        myCamera.LookAt(transform);                                          //摄像机对象朝向
设置按钮位置和大小:
//按钮位置
        GameObject.Find("Canvas/Button1").transform.GetComponent<RectTransform>().localPosition = new Vector3(Screen.height / 6 - Screen.width / 2, Screen.height * 2 / 5 - Screen.height / 2);
        //按钮大小
        GameObject.Find("Canvas/Button1").transform.GetComponent<RectTransform>().localScale = Screen.width / 600f * new Vector3(1, 1, 1);
        //按钮位置
        GameObject.Find("Canvas/Button2").transform.GetComponent<RectTransform>().localPosition = new Vector3(Screen.height / 6 - Screen.width / 2, Screen.height / 6 - Screen.height / 2);
        //按钮大小
        GameObject.Find("Canvas/Button2").transform.GetComponent<RectTransform>().localScale = Screen.width / 600f * new Vector3(1, 1, 1);

(3)动画控制器:


4) 数据输出
(1)烘焙效果
Point Light烘焙效果


Area Light烘焙效果


Spot Light烘焙效果

(2)
动画效果:

三、 实验环境

  1. 操作系统:WINDOWS 10
  2. 开发工具:Unity3D
  3. 实验设备:PC

源代码

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

public class BUNAnimator : MonoBehaviour {
    Animator myAnimator; //声明Animator组件
    Transform myCamera;  //声明摄像机对象
	void Start () {
        myAnimator = GetComponent<Animator>();                  //初始化Animator组件
        UIInit();                                               //初始化UI界面
        myCamera = GameObject.Find("Main Camera").transform;    //初始化摄像机对象
	}
	

	void Update () {
        myCamera.position = transform.position + new Vector3(0, 1.5f, -5);   //摄像机对象跟随
        myCamera.LookAt(transform);                                          //摄像机对象朝向
	}
    void UIInit()
    {
        //按钮位置
        GameObject.Find("Canvas/Button1").transform.GetComponent<RectTransform>().localPosition = new Vector3(Screen.height / 6 - Screen.width / 2, Screen.height * 2 / 5 - Screen.height / 2);
        //按钮大小
        GameObject.Find("Canvas/Button1").transform.GetComponent<RectTransform>().localScale = Screen.width / 600f * new Vector3(1, 1, 1);
        //按钮位置
        GameObject.Find("Canvas/Button2").transform.GetComponent<RectTransform>().localPosition = new Vector3(Screen.height / 6 - Screen.width / 2, Screen.height / 6 - Screen.height / 2);
        //按钮大小
        GameObject.Find("Canvas/Button2").transform.GetComponent<RectTransform>().localScale = Screen.width / 600f * new Vector3(1, 1, 1);
    }
    public void ButtonOnClick(int index)
    {
        myAnimator.SetFloat("Aniflag", index); //向动画控制器传递参数
    }
}

博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html

相关文章