u3d011 秘密行动_学习记录

目录

1.网格碰撞器

2.灯光

3.声音AudioSource

3.人物移动

4. z轴越障碍相机跟随

5.自动寻路NavMeshAgent

6.简单计时器

7.画线LineRenderer


 

1.网格碰撞器

 放入简单模型

返回目录

2.灯光

       Spot Light聚光灯(聚光/锥光)  最耗费资源  可以改变位置和角度  用于:手电,探照灯

     Directional Light平行光(方向光)  最省资源  可以改变角度  用于:太阳,全局灯光

  Point Light点光源(由一个点向四周发射光源)  可以改变位置  用于:灯泡

  Area Light区域光(创造灯光贴图烘焙时使用)  无法应用于实时光照

 cookie 皮影材质

 Intensity灯光强度

if(alermOn){//警报闪烁
	l1.intensity = Mathf.Lerp(l1.intensity,tar,Time.deltaTime*speed);
	if(l1.intensity < low+0.1)tar=high;
	if(l1.intensity > high-0.1)tar=low;	
}else if(l1.intensity>0.01){//关闭警报
	l1.intensity = Mathf.Lerp(l1.intensity,0,Time.deltaTime*2);
}

返回目录

3.声音AudioSource

 Play On Awake(在唤醒时开始播放)

 Loop(循环)

 Mute(静音)勾选之后,静音,但是音频还是处于播放状态。

 Volume(音量)为 0 时,无声音;为 1 时,音量最大。

 Spatial Blend(空间混合)

 设置声音是 2D 声音,还是 3D 声音。

 为 0 时,是 2D 声音;为 1 时,是 3D 声音。

Distance(范围)

AudioSource.Play();//播放音频剪辑。
AudioSource.Stop();//停止播放。
AudioSource.Pause();//暂停播放。

返回目录

3.人物移动

 is Kinematic 勾上后完全由Transform控制(会导致穿墙)

 摇杆式移动

float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
if((Mathf.Abs(h)>0.1||Mathf.Abs(v)>0.1)&&Health.Hp>0){//运动

	float newSpeed = Mathf.Lerp(anim.GetFloat("Speed"),5.6f,moveSpeed*Time.deltaTime);
	anim.SetFloat("Speed",newSpeed);//控制前进

	Quaternion target = Quaternion.LookRotation( new Vector3 (h,0,v));//获取键盘向量角度(wsad)
	transform.rotation =Quaternion.RotateTowards(transform.rotation,target,Time.deltaTime*rotateSpeed*100);
    //匀速旋转*速度...需要一个较大的值
    //控制转向

}else{
	anim.SetFloat("Speed",0);//停止
}

返回目录

4. z轴越障碍相机跟随

    void Start () {

		Camoffset = transform.position - player1.position;
		//原点
		CamoffsetPlayer= new Vector3 (transform.position.x,transform.position.y,-0.1f) - player1.position;
		//玩家头上,z轴往后0.1

	}
	
	void FixedUpdate () {

		playerV3=player1.position + new Vector3(0,1,0);//检测目标点
		Thit1V3 = transform.position + new Vector3(0,0,-0.5f);//上检测发射点
		Thit2V3 = transform.position + new Vector3(0,0,-4f);//下检测发射点

		Vector3 HtiToPlayer1 = playerV3 - Thit1V3;//射线1指向玩家
		Vector3 HtiToPlayer2 = playerV3 - Thit2V3;//射线2指向玩家

		Ray ray1 = new Ray(Thit1V3,HtiToPlayer1);//上检测线
		Ray ray2 = new Ray(Thit2V3,HtiToPlayer2);//下检测线


		//=[辅助画线]======================
		Ray ray = new Ray(transform.position,playerV3 -transform.position);//相机视线
		Debug.DrawRay(ray.origin,ray.direction*20,Color.green);//射线画线
		Debug.DrawRay(ray1.origin,HtiToPlayer1 ,Color.yellow);
		Debug.DrawRay(ray2.origin,HtiToPlayer2 ,Color.blue);
		//=======================
		
		bool isHit1 = Physics.Raycast(ray1,out Thit1, HtiToPlayer1.magnitude ,~LayerMask.GetMask(Tags.enemy,Tags.lasers));
		//上检测射线 1 ,不与敌人,镭射层 发生碰撞
		bool isHit2 = Physics.Raycast(ray2,out Thit2, HtiToPlayer2.magnitude ,~LayerMask.GetMask(Tags.enemy,Tags.lasers));
		//下检测射线 2 ,不与敌人,镭射层 发生碰撞

		if(isHit1&&isHit2){
			tarpos=( Thit1.collider.tag == Tags.player)?(player1.position + Camoffset):(player1.position + CamoffsetPlayer);
			//线1 看见玩家? 往原点移动:往玩家头上移动
			Zspeed=( Thit1.collider.tag == Tags.player && Thit2.collider.tag != Tags.player)? 0 : speed ;
			//线1看见玩家,线2没看见玩家 = z轴0速,其余情况 z轴全速
		}else{
			tarpos = player1.position + CamoffsetPlayer;
			Zspeed = speed;
		}

		CamV3.x = Mathf.Lerp(transform.position.x,tarpos.x,Time.fixedDeltaTime*speed);
		CamV3.y = Mathf.Lerp(transform.position.y,tarpos.y,Time.fixedDeltaTime*speed);		
		CamV3.z = Mathf.Lerp(transform.position.z,tarpos.z,Time.fixedDeltaTime*Zspeed);
		transform.position= CamV3;
		//相机进行差值跟随
		transform.LookAt(player1.position);
		//注视主角
		
	}

返回目录

5.自动寻路NavMeshAgent

1、Agent Size 物体尺寸控制 
 Radius 物体的半径 
 Height 物体的高度 
 Base Offset 物体的上下偏移 
2、Steering 行动控制 
 Spped 物体移动的最大速度 
 Angular Speed 物体转向时的角速度 
 Acceleration 物体移动的加速度 
 Stopping Distance 距离目标点值小于设定值的时候停止 
 Auto Braking 选中会自动停止,不选中会一直前后平滑移动。 
3、Obstacle Avoidance 躲避障碍 
4、Path Finding 路径查找 
 Auto Traverse Off Mesh Link:不选中遇到Off Mesh Link点会停止,选中直接路过。 
 Auto Repath:在行走过程中被中断是否重新开始寻路,比如有门,等门打开继续进去。 
 Auto Mask 规定网格行走的区域。

 

float NavMeshAgent.remainingDistance;
//在当前路径上代理的位置与目的地之间的距离。(只读) 
navAgent.destination =new Vector3(0,0,0);
//导航位置设置

 

NavMeshAgent.updatePosition = false;//停止对位置的影响
NavMeshAgent.updateRotation = false;//停止对旋转的影响
NavMeshAgent.Warp(transform.position);//设置代理位置
NavMeshAgent.velocity;//NavMeshAgent 组件的当前速度,或手动设置速度
NavMeshAgent.Stop();//停止导航
NavMeshAgent.Resume();//恢复导航
NavMeshPath path = new NavMeshPath();//新路径获得
NavMeshAgent.CalculatePath(playerAnim.transform.position,path);//判断是否能到达
 float length = 0;
    for (int i = 0;i<path.corners.Length-1;i++){//遍历节点线段长度计算
        length+=(path.corners[i+1]-path.corners[i]).magnitude;//返回向量的长度	
    }
//path.corners[0]为路径起点
//path.corners[Length-1]为路径终点

返回目录

6.简单计时器

patrolTimer += Time.deltaTime;//计时

if(patrolTimer>patrolTime){//到达指定时间
    index++;//切换下标
    index%=4;//求余4,效果:到4为0
    patrolTimer = 0;//计时器清零		
}

返回目录

7.画线LineRenderer

lineRenderer.enabled =true;//组件开启
lineRenderer.SetPosition(0, transform.position+new Vector3(0,1,0));//点1 
lineRenderer.SetPosition(1, pLayerHp.transform.position+new Vector3(0,1,0));//点2

返回目录

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值