Unity学习笔记——博客中有游戏练习案例

		 			First   Acquaintanced   Unity  

1.导入资源到unity中

2.x轴:左右 y轴:上下 z轴:前后

3.ctrl+d复制

4.顶点吸附:选择物体+v,定位定点,再拖拽目标物体到某个定点上(先松V键)。

5.创建立方体:
(1)创建空物体:GameObject——Create Empty
(2)创建网格过滤器:Component——Mesh——Mesh Filter设置Mesh属性
(3)创建网格渲染器:Component——Mesh——MeshRendener
(4)设置材质Material属性

6.可利用unity创建物体出现的位置进行物体融合。

7.可将多个物体打总,后操作父物体进行总体操作。

  1. Opaque不透明,默认选
    Transparent 透明,用于半透明和全透明物体,如:玻璃
    Cutput镂空,用于完全透明或完全不透明的物体,如:栅栏
    Fade镂空,用于需要淡入淡出的物体

9.在这里插入图片描述

10.

11.在这里插入图片描述

12.物理着色器

13.在这里插入图片描述

14.在这里插入图片描述

15.Viewport Rect——设置摄像机的大小属性,从而设计小地图、后视镜类的视图
前提条件:depth要大于main camera,同时若两者相同则谁的最后修改谁在上面。
2D地图效果更好
在这里插入图片描述

16.ctrl+shift+F将选择物体移动到scene目前所在视角。
17.在这里插入图片描述

在视觉上是否显现可控制是否勾选layer。
在这里插入图片描述

18.将地图周围的空白部分不渲染,只留下地图。
在这里插入图片描述在这里插入图片描述
19.

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述20.在这里插入图片描述
在这里插入图片描述

C#语言基础:

1.C#
2.NET dotnet新一代多语言开发平台。
3.Mono支持在其他操作系统下开发.net程序的框架。
4.unity借助Mono实现跨平台。核心是.net framework框架。

代码语法:

console.WriteLine(); //写一行
console.ReadLine(); //读一行
console是类——工具
console.Title=“”; //设置控制台的名称
namespace *** //定义命名空间【类的地址】
变量
声明:在内存开辟空间
赋值:在该空间中储存数据
string.Format(“枪的名称为:{0},容量为:{1}.”,gunName,ammoCapacity);
标准数字字符串格式化:格式字符
在这里插入图片描述
在这里插入图片描述

Console.WriteLine(“{0:d2}”,5); //05 不足2位用0填充

Console.WriteLine(“{0:f1}”,1.26); //根据指定精度显示 1.3

Console.WriteLine(“{0:p0}”,0.1) // 以百分数显示 10%
Console.WriteLine(“我爱"Unity!”"); //我爱“unity”
char c=‘\0’ //空字符
\r\n //换行符
\t 制表符

语言在电脑中的编译过程:源代码(.cs的文本文件)——CLS编译——通用中间语言(exe dll)——机器码 0-1

#region —— 折叠代码
将一个字符数字转化为数字:

char c=‘3’; string s1=c.ToString(); int n1=int.Parse(s1);

隐式类型转换:自动转换:由小范围到大范围

byte b3=100; int i3=b3;

**显示类型转换:强制转换:**由大范围到小范围

int i4=100; byte b4=(byte)i4;

转换类型与数值类型所含的字节数有关——byte(1个字节) int(4个字节)
选择、分支、循环语句

产生1-100内的随机数

Random random=new Random(); int number=random.Next(1,101);

方法

与其他语言类似
对应API:
string str.Insert(num,“”); 在num索引处添加“ ”字符
int str.IndexOf(’ '); 返回值为‘ ’ 的索引
string str.Remove()
string str.Replace()
bool str.StartWith()
bool str.Contains()
方法的重载
递归

数组:定义方法与java类似

var定义变量,数据类型由数据自身格式决定:与js语法类似
foreach遍历数组 :for(var i in array)
数组API:
Array.IndexOf(arr,4):返回对应索引值
在这里插入图片描述

C#语言知识:在这里插入图片描述

Unity脚本:

在这里插入图片描述
脚本:附加在物体上用于定义游戏对象行为的指令代码。
unity支持三种高级编程语言:C#、JavaScript、Boo Script
语法结构:
在这里插入图片描述
1.脚本语言中的Start()与Update()方法不用就删,因为这两个方法系统自动0.2秒调用一次,参生一个栈针。
在这里插入图片描述
2.改变默认脚本初始化代码
在这里插入图片描述
在这里插入图片描述
3.设置外部编辑器
在这里插入图片描述

脚本生命周期

在这里插入图片描述
1.在这里插入图片描述
2…不能在子线程中访问主线程变量,不要在脚本中写构造函数
3.Unity是单线程执行,先做的放Awake,后做的放start
在这里插入图片描述
在这里插入图片描述
4.按帧移动、按时移动的方法
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
5.输入事件:在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
6.控制台需设置的功能:
在这里插入图片描述
7.调试:在这里插入图片描述
120集在这里插入图片描述
物体向z轴移动10,this引用了transform调动了position属性。
在这里插入图片描述
改变物体颜色

  this.GetComponent<MeshRenderer>().material.color=Color.red;

121集:Component类提供查找(在当前物体、后代、先辈)组件的功能
在这里插入图片描述

**122集:**位置旋转

在这里插入图片描述在这里插入图片描述
123集:
可通过unity圣典API查询对应方法

private void OnGUI()
   {
       if(GUILayout.Button("按钮"))
       {
         this.transform.position=new Vector3(0,0,20);
         this.GetComponent<MeshRenderer>().material.color=Color.red;
       }
       if(GUILayout.Button("pos/scale"))
       {
           //向自身坐标系 z轴移动、旋转1米
           //this。transfrom.Translate(0,0,1);
           this.transform.Rotate(0,0,1);
           //向世界坐标系z轴移动\旋转1米
           this.transform.Translate(0,0,1,Space.World);
            this.transform.Rotate(0,0,1,Space.World);
            //围绕旋转
           this.transform.RotateAround(Vector3.zero,Vector3.up,1);
       }
   }

在这里插入图片描述
124集::
Transform类提供了查找(父、根、子)变换组件、改变位置、角度、大小功能
1.寻找子物体的组件
根据名称获取子物体:

Transform childTF=this.transform.Find("子物体的名称") 求多层子物体的格式:子物体的名称/子子物体的名称

根据索引获取子物体:

int count=this.transform.childCount;
for(int i=0;i<count;i++)
{
Transform childTF=this.transform.GetChild(i);
}

练习用递归找不知道层级的子物体:

public class TransformHelper
{/// <summary>
/// 在层级未知的情况下查找子物体
/// </summary>
/// <param name="parentTF">父物体变换组件</param>
/// <param name="children">子物体名称</param>
    public static Transform GetChild(Transform parentTF,string childName)
    {
        //在子物体中查找
        Transform childTF = parentTF.Find(childName);
        if (childTF == null) return childTF;
        //将问题交给子物体
        for (int i = 0; i < parentTF.childCount; i++)
        {
            childTF = GetChild(parentTF.GetChild(i), childName);
            if (childTF != null) return childTF;
        }
        return null;
 
    }
}

125集:gameObject类
例:添加光源:

 if(GUILayout.Button("添加光源"))
       {
         GameObject lightGO=new GameObject();
         Light light=lightGO.AddComponent<Light>();
         light.color=Color.red;
         light.type=LightType.Point;
       }

Object类:
练习:查找血量最低的敌人:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class script : MonoBehaviour
{
    private void OnGUI()
    {
        if (GUILayout.Button("查找血量最低的敌人"))
        {
            //1.通过标签获取敌人
            //GameObject[] allEnemyGO = GameObject.FindGameObjectsWithTag("Enemy");
            //Enemy[] allEnemy = new Enemy[allEnemyGO.Length];
            //for (int i = 0; i < allEnemyGO.Length; i++)
            //{
            //    allEnemy[i] = allEnemyGO[i].GetComponent<Enemy>();
            //}
 
            //2.通过类型获取敌人
            Enemy[] allEnemy = FindObjectsOfType<Enemy>();
 
            Enemy min = FindEnemyByMinHP(allEnemy);
            min.GetComponent<MeshRenderer>().material.color = Color.red;
        }
        if (GUILayout.Button("查找距离最近的敌人"))
        {
            Enemy[] allEnemy = FindObjectsOfType<Enemy>();
            Enemy minDistance = FindeEnemyByMinDistance(allEnemy, transform);
            minDistance.GetComponent<MeshRenderer>().material.color = Color.red;
        }
    }
 
    public Enemy FindEnemyByMinHP(Enemy[] enemys)
    {
        Enemy min = enemys[0];
        for (int i = 1; i < enemys.Length; i++)
        {
            if (min.HP > enemys[i].HP)
                min = enemys[i];
        }
        return min;
    }
 
    //练习2:获取最近的敌人
    //float distance = Vector3.Distance(物体1.位置,物体2.位置);
    public Enemy FindeEnemyByMinDistance(Enemy[] enemys, Transform targetTF)
    {
        Enemy min = enemys[0];
        float minDistance = Vector3.Distance(min.transform.position, targetTF.position);
 
        for (int i = 1; i < enemys.Length; i++)
        {
            float distance = Vector3.Distance(enemys[i].transform.position, targetTF.position);
            if (minDistance > distance)
            {
                min = enemys[i];
                minDistance = distance;
            }
        }
 
        return min;
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Enemy : MonoBehaviour
{
    public float HP;
 
}

126集:复习Component、Transfrom、gameObject、Object类
127集:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值