unity3d中固定视角射线碰撞以及使障碍物透明

    因为之前有学习过DX9,处理方式为从摄像机处向玩家所在位置反射一条射线,如果射线撞上了其他物体,则改变该物体的alpha值,使之透明。unity3d作为一款引擎存在让这个问题变的无比的简单,因为几乎要用到的东西它都给封装好了。所以在这里记录下代码方便自己看也顺便可以帮助下有需要的朋友们。

    代码如下:

using UnityEngine;
using System.Collections;


public class IntersectTest : MonoBehaviour {

    public float m_alpha = 0.3f;
    public GameObject m_player;

	// Use this for initialization
	void Start () {
	}
	
	// Update is called once per frame
	void Update () {
        int layMask = 1 << 9;//忽略player层,player层需要自己创建
        Vector3 pointBegin = m_player.transform.position;
        Vector3 dir = (transform.position - pointBegin).normalized;
        Ray ray = new Ray(pointBegin, dir);
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit, Mathf.Infinity, ~layMask))
        {
            Debug.DrawLine(pointBegin, hit.point, Color.red);
            Collider c = hit.collider;
            if (c.tag.CompareTo("MainCamera") != 0)
            {
                c.renderer.material.shader = Shader.Find("Transparent/Diffuse");
                Color color = c.renderer.material.color;
                color.a = m_alpha;
                c.renderer.material.color = color;
            }
        }
	}
}

效果图,红线是从玩家角色身上向摄像机发出的射线

PS:射线碰撞需要给物体套上外接体。

PPS:该方法同样可以用在自由视角下的摄像机拉近拉远的问题上。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值